三、常见问题之表头宽度怎么调整?
转载自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);
五、常见问题之表格的选中单行的信号响应
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