QT笔记——QtPropertyBrowser的使用

news2024/11/18 16:44:13

上一节,我们将了如何去配置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 自定义类型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/463170.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git -团队开发 版本控制

文章目录 Git的概念Git的安装过程Git结构交互方式初始化本地仓库Git常用命令add和commit命令status命令log命令log命令2reset命令hard参数/mixed参数/soft参数 删除文件找回本地库删除的文件找回暂存区删除的文件 diff命令 分支操作分支冲突问题&#xff0c;如何解决冲突题 Git…

2023年的深度学习入门指南(9) - Triton

2023年的深度学习入门指南(9) - Triton 上一篇我们学习了如何用CUDA进行编程。 下面我们将介绍几种深度学习GPU编程的优化方法。 第一种我们称之为多面体编译器。我们知道&#xff0c;在传统的IR&#xff0c;比如LLVM-IR中&#xff0c;使用条件分支来编码控制流信息。这种相对…

Find My资讯|美国苹果AirTag市场大涨,助推Find My技术的发展

根据市场调查机构 Circana公布的最新统计数据&#xff0c;在苹果 AirTag 的助推下&#xff0c;美国市场物品追踪器市场快速发展。 报告称 AirTag 等物品追踪器已经成为旅行者的必备品&#xff0c;今年 1 月和 2 月期间&#xff0c;物品追踪器的销售额同比增长了 82%&#xff…

宁波博视眼科俞存院长:晒太阳会晒出白内障?是真的吗?

春意渐浓&#xff0c;人们纷纷踏出家门&#xff0c;享受暖暖的阳光。众所周知&#xff0c;适当晒太阳可以促进人体合成维生素D&#xff0c;对身体有一定的好处。 但你知道吗?太阳光中的紫外线可能会导致部分眼病的出现&#xff0c;例如&#xff1a;白内障。 晒太阳怎么会晒出白…

【数据结构初阶】第七节.树和二叉树的基本操作

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;Java初阶数据结构 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01; 文章目…

[Linux]文件系统权限与访问控制

​⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐所属专栏&#xff1a;Linux基础操作。本文主要是分享一些Linux系统常用操作&#xff0c;内容主要来源是学校作业&#xff0c;分享出来的…

Docker 安装

系列文章目录 文章目录 系列文章目录前言一、Docker 安装地址&#xff1f;二、常用命令1. 基础命令2. docker 镜像命令 三、安装步骤1.卸载原有环境2.安装对应的依赖环境和镜像地址3. 安装过慢设置镜像4. 直接安装docker CE5. 启动docker服务6. 查看docker的版本7. 配置阿里云的…

改进YOLOv8 | 主干网络篇 | YOLOv8 更换骨干网络之 SwinTransformer | 《基于位移窗口的层次化视觉变换器》

论文地址:https://arxiv.org/pdf/2103.14030.pdf 代码地址:https://github.com/microsoft/Swin-Transformer 本文介绍了一种新的视觉Transformer,称为Swin Transformer,它可以作为计算机视觉通用的骨干网络。从语言到视觉的转换中,适应Transformer所面临的挑战源于两个领…

112页智慧城市大数据综合解决方案(ppt可编辑)

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除 项目必要性分析 完善信息基础设施布局规划&#xff0c;满足区域信息化的发展要求 信息化已成为提升城市管理、促进经济发展、改善民生的重要手段合理高效的部署宽带信息基础…

亚马逊美国站纽扣电池标准

近日&#xff0c;亚马逊美国站公布要求卖家需遵守扭电池和硬币电池的新包装和警示标签规定公告。 在亚马逊销售单独的纽扣电池和硬币电池&#xff0c;则从2023年3月2日开始&#xff0c;您需要证明您的符合儿童安全包装和警告标签要求。 适用产品有;单独的纽扣电池或硬币电池&a…

FPGA基础知识 LCMXO3LF-6900C-6BG400I FPGA可编程逻辑简介

FPGA是英文Field&#xff0d;Programmable Gate Array的缩写&#xff0c;即现场可编程门阵列&#xff0c;它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路&#xff08;ASIC&#xff09;领域中的一种半定制电路而出现的&#xff0c;既解决了定…

ThinkPHP模型操作下

ThinkPHP模型操作下 前言1. 模型设置1.name(数据表除去前后缀的名字&#xff0c;默认是当前model的类名)2.table(完整的数据表名)3.pk 改变主键名称4.schema 设置模型对应数据表字段及类型5.disuse 数据表废弃字段&#xff08;数组&#xff09;6.模型的其他属性 2. 模型的主要功…

从零搭建MySQL监控平台(mysql-exporter+Prometheus+Grafana)

文章目录 一、软件安装二、 软件配置配置mysql_exporter配置prometheus配置Grafana 本文是我自己在Macbook上本地从零开始搭建一套MySQL监控平台&#xff0c;监控的也是我本机的MySQL&#xff0c;过程包括prometheus、mysql_exporter、Grafana的配置与下载。 一、软件安装 我是…

像素(物理像素dp、逻辑像素dip、物理像素 / 逻辑像素drp)

1、像素 px实际是pixel&#xff08;像素&#xff09;的缩写&#xff0c;它是图像显示的基本单元&#xff0c;既不是一个确定的物理量&#xff0c;也不是一个点或者小方块&#xff0c;而是一个抽象概念。 一个个的小格子被定义为一个单位&#xff0c;叫做 像素 &#xff0c;2像…

【Android Framework (八) 】- Service

文章目录 知识回顾启动第一个流程initZygote的流程system_serverServiceManagerBinderLauncher的启动AMS 前言源码分析1.startService2.bindService 拓展知识1:Service的两种启动方式对Service生命周期有什么影响&#xff1f;2:Service的启动流程3:Service的onStartCommand返回…

国内直接使用的ChatGTP

ChatGTP都能做一些什么事&#xff1a; 回答问题&#xff1a;我可以通过自然语言处理技术来回答用户的问题&#xff0c;提供有用的信息和解决方案。 聊天互动&#xff1a;我可以和用户聊天互动&#xff0c;倾听对话和提供支持。 搜索&#xff1a;我可以搜索互联网和已知的数据…

宠物领养系统【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设&#xff01;&#xff01;&#xff01; 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址&#xff1a;https://download.csdn.net/download/qq_50954361/87708775 更多系统资源库…

Word行距怎么设置?基础设置,必会的4个方法!

案例&#xff1a;Word行距怎么设置 【各位朋友&#xff0c;谁知道Word行距怎么设置呀&#xff1f;今天写文章时&#xff0c;感觉所有文字都挤在一起&#xff0c;非常不美观&#xff0c;想调一下行距&#xff0c;在线等一个简单的方法&#xff01;】 Word作为打工人和学生党必…

多种内网穿透的实现方案

1. 内网穿透的应用场景 1.1. 开发调试 比如企业微信、钉钉等开发&#xff0c;需要一个回调地址&#xff0c;开发的时候&#xff0c;希望回调到开发的电脑上&#xff0c;打断点进行调试&#xff0c;这就需要穿透到内网的开发机器。 1.2. 演示测试 有需要演示或测试的系统&am…

Kubeadm方式搭建K8s集群【1.26.0版本】

文章目录 一、集群规划及架构二、系统初始化准备(所有节点同步操作)三、安装并配置Containerd容器运行时四、安装kubeadm(所有节点同步操作)五、初始化集群六、Node节点添加到集群七、安装网络组件Calico八、测试CoreDNS解析可用性九、拓展1、ctr和crictl命令具体区别 一、集群…