QT笔记——QtPropertyBrowser的使用

news/2024/11/23 2:05:20/

上一节,我们将了如何去配置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 折叠框修改

第九种:表格的选中单行的信号响应

.hQList<QtProperty*> m_PropertyList;
.cppQtVariantProperty* 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 自定义类型


http://www.ppmy.cn/news/51369.html

相关文章

springboot,Flowable 流程实例的激活与挂起(二)

一.简介 接上一篇 springboot&#xff0c;Flowable 流程实例的激活与挂起&#xff08;一&#xff09; 二.流程实例的挂起与激活 1.流程实例的挂起 挂起一个流程实例的代码如下&#xff1a; Test void test08() {List<ProcessDefinition> list repositoryService.cr…

安全测试:配置管理潜在威胁

一、配置管理威胁有哪些 明文信息传输漏洞敏感信息泄露默认或可猜解用户账户会话重放攻击测试验证码缺陷http方法测试 二、明文信息传输和存储漏洞 漏洞描述&#xff1a; 页面中没有对传输的用户名和密码等敏感信息进行加密后传输。用户密码后台存储是否加密。 产生原因&a…

手写axios源码系列二:创建axios函数对象

文章目录 一、模块化目录介绍二、创建 axios 函数对象1、创建 axios.js 文件2、创建 defaults.js 文件3、创建 _Axios.js 文件4、总结 当前篇章正式进入手写 axios 源码系列&#xff0c;我们要真枪实弹的开始写代码了。 因为 axios 源码的代码量比较庞大&#xff0c;所以我们这…

mall-swarm微服务商城系统

mall-swarm是一套微服务商城系统&#xff0c;采用了 Spring Cloud 2021 & Alibaba、Spring Boot 2.7、Oauth2、MyBatis、Docker、Elasticsearch、Kubernetes等核心技术&#xff0c;同时提供了基于Vue的管理后台方便快速搭建系统。mall-swarm在电商业务的基础集成了注册中心…

Python数据结构与算法-欧几里算法(p95)

一、欧几里算法原理 欧几里得公式 欧几里得算法&#xff1a;gcd(a,b) gcd(b, a mod b) &#xff1b; mod是指模&#xff0c;即a/b取余数。 运算示例&#xff1a; gcd&#xff08;60,21&#xff09; gcd(21,18) gcd(18,3)gcd(3,0) 证明略 最大公约数-欧几里得求解 &#xff08…

一致性 Hash 算法 及Java TreeMap 实现

1、一致性 Hash 算法原理 一致性 Hash 算法通过构建环状的 Hash 空间替线性 Hash 空间的方法解决了这个问题&#xff0c;整个 Hash 空间被构建成一个首位相接的环。 其具体的构造过程为&#xff1a; 先构造一个长度为 2^32 的一致性 Hash 环计算每个缓存服务器的 Hash 值&…

2023移动云大会 | “六大”服务承诺 全力做优“心级服务”

4月25日&#xff0c;以“云擎未来 智信天下”为主题的2023移动云大会在苏州金鸡湖国际会议中心举办&#xff0c;众多政府领导、院士专家、知名企业客户与合作伙伴高层等数千名嘉宾齐聚一堂。 大会期间&#xff0c;移动云深入践行“为国建云”的使命&#xff0c;推出“六大”服…

数字ic验证工程师经典笔试面试题(含答案)

数字ic验证工程师在找工作时&#xff0c;刷笔试面试题必不可少&#xff0c;在面试前做好充足的准备才能抓住更多的机会&#xff0c;今天小编为大家准备了数字ic验证工程师大厂面试常用笔试面试题。 下列关于代码覆盖率描述错误的是&#xff1a;CD A.代码覆盖率包括语句覆盖率…