赞
踩
上一节,我们将了如何去配置QtPropertyBrowser
本节,我们将说明 如何 去 使用QtPropertyBrowser 这个属性类的一些基本知识
简单的几种用法:
首先:
我们需要创建一个Widget 提升一个类 为 QtTreePropertyBrowser
.h文件
QtVariantPropertyManager* m_pVarManager;
.cpp文件
m_pVarManager = new QtVariantPropertyManager(ui.widget);
第一种:添加键值对属性
列如:int,bool,double,string类型
//设置 int 类型 QtVariantProperty* item = m_pVarManager->addProperty(QVariant::Int, QStringLiteral("Int: ")); item->setValue(20); ui.widget->addProperty(item); //设置 Bool类型 item = m_pVarManager->addProperty(QVariant::Bool, QStringLiteral("Bool: ")); item->setValue(true); ui.widget->addProperty(item); //设置 Double类型 item = m_pVarManager->addProperty(QVariant::Double, QStringLiteral("Double: ")); item->setValue(13.14); ui.widget->addProperty(item); //设置 Double类型 item = m_pVarManager->addProperty(QVariant::String, QStringLiteral("String: ")); item->setValue(QStringLiteral("lion_cxq")); ui.widget->addProperty(item);
第二种:添加可编辑的键值对属性
QtVariantEditorFactory 这个就是 可编辑的 工厂,我们将属性添加进来,就可以让值属性可以进行编辑
QtVariantEditorFactory* editFactory = new QtVariantEditorFactory(ui.widget);
ui.widget->setFactoryForManager(m_pVarManager, editFactory);
//添加可编辑工厂 QtVariantEditorFactory* editFactory = new QtVariantEditorFactory(ui.widget); ui.widget->setFactoryForManager(m_pVarManager, editFactory); //设置 int 类型 QtVariantProperty* item = m_pVarManager->addProperty(QVariant::Int, QStringLiteral("Int: ")); item->setValue(20); ui.widget->addProperty(item); //设置 Bool类型 item = m_pVarManager->addProperty(QVariant::Bool, QStringLiteral("Bool: ")); item->setValue(true); ui.widget->addProperty(item); //设置 Double类型 item = m_pVarManager->addProperty(QVariant::Double, QStringLiteral("Double: ")); item->setValue(13.14); ui.widget->addProperty(item); //设置 Double类型 item = m_pVarManager->addProperty(QVariant::String, QStringLiteral("String: ")); item->setValue(QStringLiteral("lion_cxq")); ui.widget->addProperty(item);
第三种:想要一些可编辑 和 一些不可编辑的 属性值
.h文件 QtVariantPropertyManager* m_pEditableManager; QtVariantPropertyManager* m_pNotEditManager; .cpp文件 m_pEditableManager = new QtVariantPropertyManager(ui.widget); m_pNotEditManager = new QtVariantPropertyManager(ui.widget); //m_pEditableManager 可编辑管理器 添加可编辑工厂 QtVariantEditorFactory* editFactory = new QtVariantEditorFactory(ui.widget); ui.widget->setFactoryForManager(m_pEditableManager, editFactory); //设置 int 类型 可以编辑 使用 可编辑管理器添加 QtVariantProperty* item = m_pEditableManager->addProperty(QVariant::Int, QStringLiteral("Int: ")); item->setValue(20); ui.widget->addProperty(item); //设置 int 类型 不可以编辑 使用 不可编辑管理器添加 QtVariantProperty* item2 = m_pNotEditManager->addProperty(QVariant::Int, QStringLiteral("Int: ")); item2->setValue(40); ui.widget->addProperty(item2);
第四种:添加分组 的 属性值
QtProperty* groupItem1 = m_pEditableManager->addProperty(QtVariantPropertyManager::groupTypeId(), QStringLiteral(“分组1”));
groupItem1->addSubProperty(item);
m_pEditableManager = new QtVariantPropertyManager(ui.widget); m_pNotEditManager = new QtVariantPropertyManager(ui.widget); //添加可编辑工厂 QtVariantEditorFactory* editFactory = new QtVariantEditorFactory(ui.widget); ui.widget->setFactoryForManager(m_pEditableManager, editFactory); QtProperty* groupItem1 = m_pEditableManager->addProperty(QtVariantPropertyManager::groupTypeId(), QStringLiteral("分组1")); //设置 int 类型 QtVariantProperty* item = m_pEditableManager->addProperty(QVariant::Int, QStringLiteral("Int: ")); item->setValue(20); groupItem1->addSubProperty(item); QtProperty* groupItem2 = m_pNotEditManager->addProperty(QtVariantPropertyManager::groupTypeId(), QStringLiteral("分组2")); QtVariantProperty* item2 = m_pNotEditManager->addProperty(QVariant::Int, QStringLiteral("Int: ")); item2->setValue(40); groupItem2->addSubProperty(item2); ui.widget->addProperty(groupItem1); ui.widget->addProperty(groupItem2);
第五种:修改了值,我们肯定要获取到值
当属性被编辑修改时,是会产生信号的,信号如下
QtVariantPropertyManager::valueChanged(QtProperty *property, constQVariant &value)
我们需要定义一个QMap来存储QtProperty和每个条目的名字之间的对应关系,在创建每个条目的时候存储这两个参数。再创建一个槽函数,参数为信号对应的参数
.h文件 QtVariantPropertyManager* m_pEditableManager; QtVariantPropertyManager* m_pNotEditManager; QMap<QtProperty*, QString> m_PropertyToQString; .cpp文件 m_pEditableManager = new QtVariantPropertyManager(ui.widget); m_pNotEditManager = new QtVariantPropertyManager(ui.widget); //添加可编辑工厂 QtVariantEditorFactory* editFactory = new QtVariantEditorFactory(ui.widget); ui.widget->setFactoryForManager(m_pEditableManager, editFactory); QtProperty* groupItem1 = m_pEditableManager->addProperty(QtVariantPropertyManager::groupTypeId(), QStringLiteral("分组1")); //设置 int 类型 QtVariantProperty* item = m_pEditableManager->addProperty(QVariant::Int, QStringLiteral("Int: ")); item->setValue(20); m_PropertyToQString[item] = "Int"; groupItem1->addSubProperty(item); QtProperty* groupItem2 = m_pNotEditManager->addProperty(QtVariantPropertyManager::groupTypeId(), QStringLiteral("分组2")); QtVariantProperty* item2 = m_pNotEditManager->addProperty(QVariant::Int, QStringLiteral("Int: ")); item2->setValue(40); groupItem2->addSubProperty(item2); ui.widget->addProperty(groupItem1); ui.widget->addProperty(groupItem2); connect(m_pEditableManager, &QtVariantPropertyManager::valueChanged, this, &QtPropertyBrowserTest::PropertyValueChanged); 槽函数: void QtPropertyBrowserTest::PropertyValueChanged(QtProperty* property, const QVariant& value) { QString propertyName = m_PropertyToQString[property]; qDebug() << "propertyName:" << propertyName << "value.toString():" << value.toString(); }
第六种:当我们的键值非常长时,不能移动,导致出现…现象
QtTreePropertyBrowser::Interactive | 交互 |
---|---|
QtTreePropertyBrowser::Fixed | 固定 |
QtTreePropertyBrowser::ResizeToContents | 自动调整内容 |
QtTreePropertyBrowser::Stretch | 拉伸 |
ui.widget->setResizeMode(QtTreePropertyBrowser::Interactive);
源码中只能设置首列的长度:
ui.widget->setSplitterPosition(100);
修改源码系列可更改任意index 的 值 宽度 QtPropertyBrowser 更改index长度
第七种:QVariant::Double类型的 只能有2位小数
QtVariantProperty* item = m_pEditableManager->addProperty(QVariant::Double, QStringLiteral("Double: "));
item->setValue(13.14123);
ui.widget->addProperty(item);
设置后我们发现,只显示了两个小数 位 13.14,如何修改可以有多个小数呢
QtVariantProperty* item = m_pEditableManager->addProperty(QVariant::Double, QStringLiteral("Double: "));
item->setValue(13.14123);
item->setAttribute(QStringLiteral("decimals"), 5);
ui.widget->addProperty(item);
这样我们就可以显示多个小数位
来自该链接:QtPropertyBrowser 小数位数修改
第八种:收缩或者展开我们的折叠框
QtProperty* groupItem1 = m_pEditableManager->addProperty(QtVariantPropertyManager::groupTypeId(), QStringLiteral("分组1"));
ui.widget->addProperty(groupItem1);
QList<QtBrowserItem*> list = ui.widget->items(groupItem1);
ui.widget->setExpanded(list.at(0), false);
这样我们就可以搜索我们的折叠框
来自该链接:QtPropertyBrowser 折叠框修改
第九种:表格的选中单行的信号响应
.h QList<QtProperty*> m_PropertyList; .cpp QtVariantProperty* item = m_pEditableManager->addProperty(QVariant::Int, QStringLiteral("Int: ")); item->setValue(20); m_PropertyToQString[item] = "Int"; groupItem1->addSubProperty(item); m_PropertyList.push_back(item); connect(ui.widget, &QtTreePropertyBrowser::currentItemChanged, this, &QtPropertyBrowserTest::slotItemChanged); 槽函数: void QtPropertyBrowserTest::slotItemChanged(QtBrowserItem* item) { int index = -1; for (int i = 0; i < m_PropertyList.size(); i++) { if (m_PropertyList[i] == item->property()) { index = i; break; } } qDebug() << index; }
第十种:修改标题
修改源码,在源码中添加 函数
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 << QStringLiteral("轴号") << QStringLiteral("坐标值(mm)");
ui->widget->setHeaderLabels(head);
这样我们就可以修改我们的头标题
来自该链接:QtPropertyBrowser 头标题修改
参考博客:
QtPropertyBrowser 简单属性值 使用 一
QtPropertyBrowser 键值长度错误 修改
QtPropertyBrowser 使用 二
QtPropertyBrowser 自定义类型
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。