详解Qt5.12.9属性表控件:QtPropertyBrowser的使用示例/折叠/展开/小数位数/QSS样式/标题修改/选中行号等(2)

三、常见问题之表头宽度怎么调整?


转载自https://blog.csdn.net/xinyuelan/article/details/88706486


QtTreePropertyBrowser的表头默认模式是QtTreePropertyBrowser::Stretch,表头是不允许动态调整大小的,如果属性名称比较长,就会出现“XXXXXX...”的情况。


QtTreePropertyBrowser的表头属性有以下几种:


QtTreePropertyBrowser::Interactive            //交互

QtTreePropertyBrowser::Fixed                  //固定

QtTreePropertyBrowser::ResizeToContents       //自动调整内容

QtTreePropertyBrowser::Stretch                //拉伸


如何设置成可以通过鼠标动态的调整表头段的大小呢?


方法1、设置QtTreePropertyBrowser对象模式为QtTreePropertyBrowser::ResizeToContents。


ui->widgetL->setResizeMode(QtTreePropertyBrowser::ResizeToContents);


试试看,能否满足。如果不行,就尝试下面的方法2。


方法2、设置QtTreePropertyBrowser对象模式为QtTreePropertyBrowser::Interactive。


ui->widgetL->setResizeMode(QtTreePropertyBrowser::Interactive);

QtTreePropertyBrowser类自带一个可以指定表头大小的函数 QtTreePropertyBrowser::setSplitterPosition(int position),可以通过该函数设置表头的宽度,以适应Item的大小。但该函数仅能设定第一列,看原型函数,如下:


void QtTreePropertyBrowser::setSplitterPosition(int position)

{

   d_ptr->m_treeWidget->header()->resizeSection(0, position);

}

通过对函数 setSplitterPosition()的重载,实现可修改任一表头的宽度,代码如下:


/**

* @brief QtTreePropertyBrowser::setSplitterPosition修改表头宽度 - 新增

* @param index 表头索引

* @param position 表头宽度

*/

void QtTreePropertyBrowser::setSplitterPosition(int index, int position)

{

   d_ptr->m_treeWidget->header()->resizeSection(index, position);

}

在自己的cpp属性树初始化中,加入如下代码,可实现需求。


//一次调频动作结果

m_pResultVarManager = new QtVariantPropertyManager(ui->result_property_tree);

ui->widgetL->setResizeMode(QtTreePropertyBrowser::Interactive);

ui->widgetL->setSplitterPosition(0, 235);

ui->widgetL->setSplitterPosition(1, 170);


四、常见问题之表格的标题怎么修改?


QtPropertyBrowser里面的表格本质上是QTreeWidget。需要自己手动在类QtTreePropertyBrowser,新增成员函数,实现标题的修改:


class QtTreePropertyBrowser : public QtAbstractPropertyBrowser
{
public:
    void setHeaderLabels(const QStringList &labels);
}
void QtTreePropertyBrowser::setHeaderLabels(const QStringList &labels)
{
    d_ptr->m_treeWidget->setHeaderLabels(labels);
}


使用说明:


//标题


QStringList head; head << tr("轴号") << tr("坐标值(mm)");


ui->widget->setHeaderLabels(head);


详解Qt5.12.9属性表控件:QtPropertyBrowser的使用示例/折叠/展开/小数位数/QSS样式/标题修改/选中行号等(2)



五、常见问题之表格的选中单行的信号响应


QtPropertyBrowser里面的表格本质上是QTreeWidget。鼠标单选每一行时,如何判断当前选中的是哪一行?


通过信号QtTreePropertyBrowser::currentItemChanged来实现。


//信号槽
    connect(ui->widgetL, &QtTreePropertyBrowser::currentItemChanged, this, &FormProcessProofing::slotItemChangedL);
void FormProcessProofing::slotItemChangedL(QtBrowserItem *item)
{
    int index = -1;
    for (int i = 0; i < m_listPropL.size(); i++)
    {
        if (m_listPropL[i] == item->property())
        {
            index = i;
            break;
        }
    }
    std::cout << index << endl;
}


六、常见问题之小数位数如何调整?


QVariant::Double表格数值默认是2位小数,如何改变?


源文件qtpropertymanager.cpp提供了接口函数
/*!
    \fn void QtDoublePropertyManager::setDecimals(QtProperty *property, int prec)
    Sets the precision of the given \a property to \a prec.
    The valid decimal range is 0-13. The default is 2.
    \sa decimals()
*/
void QtDoublePropertyManager::setDecimals(QtProperty *property, int prec)
QtVariantPropertyManager *pVarManager = new QtVariantPropertyManager(ui->widget);
item = pVarManager->addProperty(QVariant::Double, QStringLiteral("浮点数据"));
item->setAttribute(QLatin1String("decimals"), 5);
item->setValue(3.1415926);
ui->widget->addProperty(item);



七、常见问题之折叠展开


//折叠


QtVariantPropertyManager *pVarManager = new QtVariantPropertyManager(ui->widget);

QSet<QtProperty *> p = pVarManager->properties();

QList<QtBrowserItem *> list = ui->widget_2->items(groupItem);

ui->widget_2->setExpanded(list.at(0), false);



八、常见问题之QSS字体颜色


表格里的文字颜色,其实就是对应QSS的QTreeWidget


QTreeWidget{

background-color: #1d1f20;

color:#386487;

}

QTreeWidget::item{

background: #1d1f20;

}


x、源码分享


请下载完整的示例1源码:


https://download.csdn.net/download/libaineu2004/12914683


请下载完整的示例2源码:


https://download.csdn.net/download/libaineu2004/12914790


我的开源仓库:


https://gitee.com/libaineu2004/qproperty-browser-demo


上一篇:【SSH网上商城项目实战15】线程、定时器同步首页数据(类似于CSDN博客定期更新排名)


下一篇:CentOS6.9安装RabbitMQ和源码编译安装php的RabbitMQ扩展