QT笔记——QtPropertyBrowser的使用

news/2024/3/29 21:04:23/文章来源:https://blog.csdn.net/lion_cxq/article/details/130374756

上一节,我们将了如何去配置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.luyixian.cn/news_show_103707.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解客户关系管理系统

一、客户关系管理系统的重要性 客户关系管理系统&#xff0c;是指利用软件、硬件和网络技术&#xff0c;为企业建立一个客户信息收集、管理、分析和利用的信息系统。以客户数据的管理为核心&#xff0c;记录企业在市场营销和销售过程中和客户发生的各种交互行为&#xff0c;以…

华为C++研发工程师编程题 ACM模式输入输出|| 1.汽水瓶,2.明明的随机数,3.进制转换

C ACM输入输出 1.汽水瓶题目描述思路代码如下 2.明明的随机数题目描述思路&#xff1a;代码如下&#xff1a; 3.进制转换题目描述思路&#xff1a;代码如下 题目链接&#xff1a; 华为研发工程师编程题 1.汽水瓶 题目描述 某商店规定&#xff1a;三个空汽水瓶可以换一瓶汽水…

服务器空间不足处理与解决思路—实战docker占用空间太大

前言 服务器Centos操作系统&#xff0c;空间不足的问题处理了三次了&#xff0c;决定把它的解决思路和处理过程记录下来。服务器空间不足是一个经常会遇到的问题&#xff0c;尤其是在大型应用程序和网站上。当服务器空间不足时&#xff0c;应该采取一些步骤来处理和解决这个问…

LeetCode:206. 反转链表

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; &#x1f33b;算法&#xff0c;不如说它是一种思考方式&#x1f340; 算法专栏&#xff1a; &#x1f449;&#x1f3fb;123 一、&#x1f331;206. 反转链表 题目描述&#xff1a;给你单链表的头节点 head &#x…

html学习(布局方式(layout)、浮动(float)、定位(position)、弹性盒(flex))

布局方式(layout) 文档流 文档流&#xff08;normal flow&#xff09; 文档流通俗的讲&#xff0c;就是一个web页面中&#xff0c;每一个模块只能从上到下从左往右的方式排列在页面上。 将窗口自下而上分成一行一行&#xff0c;应在每行中按从左至右的依次排放元素&#xff0…

光纤网卡传输速率和它的应用领域有哪些呢?通常会用到哪些型号网络变压器呢?

Hqst盈盛&#xff08;华强盛&#xff09;电子导读&#xff1a;常有客户问起光纤网卡该如何选用到合适的产品&#xff0c;选用时要注意到哪些事项&#xff0c;这节将结合配合到的网络变压器和大家一起探讨&#xff0c;希望对大家有些帮助。 1&#xff0e;光纤网卡传输速率与网络…

【iOS-分类,拓展和关联对象底层探究】

前言 寒假分享会问题解决二 早在大一的OC的学习过程就知道了分类和拓展的区别和联系&#xff0c;分类不能添加成员变量&#xff0c;而拓展可以添加成员变量。分类是在运行时期实现的&#xff0c;而拓展只是编译器的时候就实现了。对于分类我们可以通过关联对象来为我们需要的分…

线程池四种拒绝机制 实现 及执行日志

目录 目录 目录 创建线程池 测试代码 运行线程 全量代码 日志 AbortPolicy 报出异常模式 DiscardPolicy 放弃机制啥也不处理 DiscardOldestPolicy 放弃机制&#xff0c;放弃列队最早进入的 CallerRunsPolicy 交给主线程执行 创建线程池 public static ExecutorServi…

项目范围控制:如何控制项目范围的变化?

一个成功的项目需要在进度、成本和质量之间取得平衡。控制项目交付范围是实现这个平衡的关键。然而&#xff0c;项目范围是会变化的&#xff0c;因此控制项目范围变化是必要的。 如何控制项目范围的变化&#xff1f; 1、了解项目的交付范围 项目经理、团队成员、利益相关者和…

我用什么写Python?

入门教程、案例源码、学习资料、读者群 请访问&#xff1a; python666.cn 大家好&#xff0c;欢迎来到 Crossin的编程教室 &#xff01; 通常来说&#xff0c;每个程序员都有自己趁手的兵器&#xff1a;代码编辑器。你要是让他换个开发环境&#xff0c;恐怕开发效率至少下降三成…

c/c++:char*定义常量字符串,strcmp()函数,strcpy()函数,寻找指定字符,字符串去空格

c/c&#xff1a;char*定义常量字符串&#xff0c;strcmp()函数&#xff0c;strcpy()函数&#xff0c;寻找指定字符&#xff0c;字符串去空格 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;此时学会c的话&#xff0c; 我所…

Python爬虫基础之二

Python爬虫基础包括HTTP协议、HTML、CSS和JavaScript语言基础、requests库的使用、Beautiful Soup库的使用、xpath和正则表达式的使用等。此外&#xff0c;还应该了解反爬虫机制和爬虫的一些常见问题及解决方法。 上一篇文章讲解了有关条件判断语句、循环语句等相关知识&#…

陆奇-奇绩创坛-chatGPT新范式,新时代,新机会

奇绩创坛-新范式&#xff0c;新时代&#xff0c;新机会 01-新范式 新范式的新拐点 新范式的历史环境 新范式的社会影响 新范式的缔造者&#xff1a;Sam Altman和OpenAI 新范式的动力引擎 新范式的演化路径 02-新时代 新时代的宏观发展格局 新时代的中国机会 新时代的OpenAI生…

IT项目管理之软件测试

1. 定义 软件测试是使用人工或者自动的手段来运行或者测定某个软件系统的过程&#xff0c;其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。 在软件投入使用前&#xff0c;要经过一系列的严格测试&#xff0c;才能保证交付质量。 2. QC & QA &a…

开源模型ModelScope的初探使用

泛AI开发者的一站式模型服务产品平台 阿里达摩院推出了一个开源的模型共享平台&#xff0c;包括计算机视觉、多模态、自然语言处理等多个领域上手即用的模型&#xff0c;如果AI相关模型感兴趣的同学&#xff0c;或者想基于基础模型做业务场景的同学&#xff0c;都可以用这个平…

C++三大特性—继承 “访问控制”

本文主要阐述关于C继承中基类与派生类之间的访问关系 继承方式与访问方式 继承定义格式&#xff1a; 派生类可以继承定义在基类的成员&#xff0c;但是派生类的成员函数不一定有权访问从基类继承来的成员    访问限定符的作用&#xff1a;控制派生类从基类继承而来的成员是否…

学习系统编程No.23【信号实战】

引言&#xff1a; 北京时间&#xff1a;2023/4/23&#xff0c;最近学习状态不怎么好&#xff0c;总是犯困&#xff0c;没精力的感觉&#xff0c;可能是病没有好彻底的原因&#xff0c;也可能是我内心因为生病而认为摆烂理所应当&#xff0c;反正最后导致摆烂&#xff0c;课现在…

android之 Launcher改造仿桌面排版的效果

一&#xff0c;背景 1.1 新接手一个灯光控制项目&#xff0c;其页面和效果还是比交复杂的&#xff0c;其中一个功能就是仿苹果桌面来排版灯具&#xff0c;支持拖拽&#xff0c;分组&#xff0c;分页。 拖动图标的时候判断是否空白位置还是已经有占位了&#xff0c;有的话就把…

体验了多款国产类ChatGPT产品后,我选择了道合顺的【ChatIC】

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后端的开发语言A…

springboot实用配置

springboot实用配置 &#xff08;一&#xff09;打包与运行&#xff08;二&#xff09;配置高级1.临时属性设置2.配置文件分类3.自定义配置文件 &#xff08;三&#xff09;多环境开发&#xff08;四&#xff09;日志1.日志基础2.日志输出格式控制3.日志文件 &#xff08;一&am…