1.简介
属性表是vs2003时引入的的新控件,用于流量和设置大量的信息,现在,很多软件上都能看到它的身影,如vs,Qt Creator等IDE的详细设置里都离不开属性表。
2.安装部署
想用动态链接库的,只需要自己新建一个config.pri文件,里面写上SOLUTIONS_LIBRARY = yes即可。建议大家使用动态库,避免一些moc文件生成的一些诡异问题~~
部署QtTreePropertyBrowser非常简单,只需要把解压的文件夹放在你的工程目录下,在pro文件里加入
include($$PWD/[qtpropertybrowser文件夹]/src/qtpropertybrowser.pri)
3.属性表的使用简介
3.1添加内容
-
QtBoolPropertyManager
-
QtColorPropertyManager
-
QtDatePropertyManager
-
QtDateTimePropertyManager
-
QtDoublePropertyManager
-
QtEnumPropertyManager
-
QtFlagPropertyManager
-
QtFontPropertyManager
-
QtGroupPropertyManager
-
QtIntPropertyManager
-
QtPointPropertyManager
-
QtRectPropertyManager
-
QtSizePropertyManager
-
QtSizePolicyPropertyManager
-
QtStringPropertyManager
-
QtTimePropertyManager
-
QtVariantPropertyManager
QtVariantPropertyManager*m_pVarManager;
cpp:
1 m_pVarManager =newQtVariantPropertyManager(ui->propertyTree);
2 QtVariantProperty *item =m_pVarManager->addProperty(QVariant::Int, QStringLiteral("整形数据:"));
3 item->setValue(101);
4 ui->propertyTree->addProperty(item);
5 item =m_pVarManager->addProperty(QVariant::Bool, QStringLiteral("布尔型数据:"));
6 item->setValue(true);
7 ui->propertyTree->addProperty(item);
8 item =m_pVarManager->addProperty(QVariant::Double, QStringLiteral("浮点数据:"));
9 item->setValue(3.1415926);
10 ui->propertyTree->addProperty(item);
11 item =m_pVarManager->addProperty(QVariant::String, QStringLiteral("字符串数据:"));
12 ui->propertyTree->addProperty(item);
13 item->setValue(QStringLiteral("尘中远"));
1 m_pVarManager =newQtVariantPropertyManager(ui->propertyTree);
2 QtProperty *groupItem =m_pVarManager->addProperty(QtVariantPropertyManager::groupTypeId(),QStringLiteral("组1"));
3 QtVariantProperty *item =m_pVarManager->addProperty(QVariant::Int, QStringLiteral("整形数据:"));
4 item->setValue(101);
5 groupItem->addSubProperty(item);
6 item =m_pVarManager->addProperty(QVariant::Bool, QStringLiteral("布尔型数据:"));
7 item->setValue(true);
8 groupItem->addSubProperty(item);
9 item =m_pVarManager->addProperty(QVariant::Double, QStringLiteral("浮点数据:"));
10 item->setValue(3.1415926);
11 groupItem->addSubProperty(item);
12 item =m_pVarManager->addProperty(QVariant::String, QStringLiteral("字符串数据:"));
13 groupItem->addSubProperty(item);
14 item->setValue(QStringLiteral("尘中远"));
15 ui->propertyTree->addProperty(groupItem);
1 QtVariantPropertyManager*m_pVarManager;
2 QtVariantEditorFactory*m_pVarFactory;
cpp
1 m_pVarManager =newQtVariantPropertyManager(ui->propertyTree);
2 m_pVarFactory =newQtVariantEditorFactory(ui->propertyTree);
3 QtProperty *groupItem =m_pVarManager->addProperty(QtVariantPropertyManager::groupTypeId(),QStringLiteral("组1"));
4 QtVariantProperty *item =m_pVarManager->addProperty(QVariant::Int, QStringLiteral("整形数据:"));
5 item->setValue(101);
6 groupItem->addSubProperty(item);
7 item =m_pVarManager->addProperty(QVariant::Bool, QStringLiteral("布尔型数据:"));
8 item->setValue(true);
9 groupItem->addSubProperty(item);
10 item =m_pVarManager->addProperty(QVariant::Double, QStringLiteral("浮点数据:"));
11 item->setValue(3.1415926);
12 groupItem->addSubProperty(item);
13 item =m_pVarManager->addProperty(QVariant::String, QStringLiteral("字符串数据:"));
14 groupItem->addSubProperty(item);
15 item->setValue(QStringLiteral("尘中远"));
16 ui->propertyTree->addProperty(groupItem);
17 ui->propertyTree->setFactoryForManager(m_pVarManager,m_pVarFactory);
void QtAbstractPropertyManager::propertyChanged ( QtProperty * property );
如果是用QtVariantPropertyManager,那么它的valueChanged 信号将会是你经常使用的信号,它会发生发生更改的属性指针以及更改后的值。
void valueChanged ( QtProperty * property, const QVariant & value )
但为了知道是哪个属性,需要附加一个map来进行记录,
h文件
1 QMap<QtProperty*,QString>m_property_dic;
2 QtVariantPropertyManager*m_pVarManager;
3 QtVariantEditorFactory*m_pVarFactory;
cpp
1 XXXClass::XXXClass(QWidget *parent)
2 :QMainWindow(parent),ui(newUi::XXXClass) {
3 m_pVarManager =newQtVariantPropertyManager(ui->propertyTree);
4 m_pVarFactory =newQtVariantEditorFactory(ui->propertyTree);
5 connect(m_pVarManager,&QtVariantPropertyManager::valueChanged,this,&XXXClass::variantPropertyValueChanged);
6 ui->propertyTree->setFactoryForManager(m_pVarManager,m_pVarFactory);
7 QtVariantProperty *item =m_pVarManager->addProperty(QVariant::Int, QStringLiteral("参数1"));
8 item->setValue(1);
9 ui->propertyTree->addProperty(item);
10 m_property_dic[item] =QStringLiteral("参数1");
11 item =m_pVarManager->addProperty(QVariant::Double, QStringLiteral("参数2"));
12 item->setValue(2);
13 ui->propertyTree->addProperty(item);
14 m_property_dic[item] =QStringLiteral("参数2");
15 item =m_pVarManager->addProperty(QVariant::String, QStringLiteral("参数3"));
16 item->setValue(QStringLiteral("czy"));
17 ui->propertyTree->addProperty(item);
18 m_property_dic[item] =QStringLiteral("参数3");
19 item =m_pVarManager->addProperty(QVariant::Bool, QStringLiteral("参数4"));
20 item->setValue(true);
21 ui->propertyTree->addProperty(item);
22 m_property_dic[item] =QStringLiteral("参数4");
23 }
24
25 voidXXXClass::variantPropertyValueChanged(QtProperty *property, constQVariant &value)
26 {
27 QString s =m_property_dic[property];
28 qDebug()<<s<<":"<<value;
29 }
输出:
"" : QVariant(int, 1)
"" : QVariant(double, 2)
"" : QVariant(QString, "czy")
"" : QVariant(bool, true)
"参数1" : QVariant(int, 123)
"参数2" : QVariant(double, 13)
"参数3" : QVariant(QString, "")
"参数3" : QVariant(QString, "中国")
"参数4" : QVariant(bool, false)
"参数4" : QVariant(bool, true)
参考提供的例子,有时候,为了方便双向控制,还会建立一个映射
QMap<QtProperty *, QString> propertyToId;
QMap<QString, QtProperty *> idToProperty;
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)