当前位置:   article > 正文

QT笔记——QtPropertyBrowser的使用

qtpropertybrowser

上一节,我们将了如何去配置QtPropertyBrowser

本节,我们将说明 如何 去 使用QtPropertyBrowser 这个属性类的一些基本知识

简单的几种用法:
首先:
我们需要创建一个Widget 提升一个类 为 QtTreePropertyBrowser

.h文件
QtVariantPropertyManager* m_pVarManager;
.cpp文件
m_pVarManager = new QtVariantPropertyManager(ui.widget);
  • 1
  • 2
  • 3
  • 4

第一种:添加键值对属性

列如: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);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

在这里插入图片描述

第二种:添加可编辑的键值对属性

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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

第三种:想要一些可编辑 和 一些不可编辑的 属性值

在这里插入图片描述

.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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

在这里插入图片描述

第四种:添加分组 的 属性值

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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

在这里插入图片描述

第五种:修改了值,我们肯定要获取到值

当属性被编辑修改时,是会产生信号的,信号如下

QtVariantPropertyManager::valueChanged(QtProperty *property, constQVariant &value)
  • 1

我们需要定义一个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();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

在这里插入图片描述

第六种:当我们的键值非常长时,不能移动,导致出现…现象

QtTreePropertyBrowser::Interactive交互
QtTreePropertyBrowser::Fixed固定
QtTreePropertyBrowser::ResizeToContents自动调整内容
QtTreePropertyBrowser::Stretch拉伸

在这里插入图片描述

ui.widget->setResizeMode(QtTreePropertyBrowser::Interactive);
  • 1

在这里插入图片描述
源码中只能设置首列的长度:

ui.widget->setSplitterPosition(100);
  • 1

修改源码系列可更改任意index 的 值 宽度 QtPropertyBrowser 更改index长度

第七种:QVariant::Double类型的 只能有2位小数

	QtVariantProperty* item = m_pEditableManager->addProperty(QVariant::Double, QStringLiteral("Double: "));
	item->setValue(13.14123);
	ui.widget->addProperty(item);
  • 1
  • 2
  • 3

设置后我们发现,只显示了两个小数 位 13.14,如何修改可以有多个小数呢

	QtVariantProperty* item = m_pEditableManager->addProperty(QVariant::Double, QStringLiteral("Double: "));
	item->setValue(13.14123);
	item->setAttribute(QStringLiteral("decimals"), 5);
	ui.widget->addProperty(item);
  • 1
  • 2
  • 3
  • 4

这样我们就可以显示多个小数位
来自该链接: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);
  • 1
  • 2
  • 3
  • 4

这样我们就可以搜索我们的折叠框
来自该链接: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;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

第十种:修改标题

修改源码,在源码中添加 函数

class QtTreePropertyBrowser : public QtAbstractPropertyBrowser
{
public:
    void setHeaderLabels(const QStringList &labels);
}
 
void QtTreePropertyBrowser::setHeaderLabels(const QStringList &labels)
{
    d_ptr->m_treeWidget->setHeaderLabels(labels);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在我们需要修改头键值对名称的地方添加

QStringList head; 
head << QStringLiteral("轴号") << QStringLiteral("坐标值(mm)");
ui->widget->setHeaderLabels(head);
  • 1
  • 2
  • 3

这样我们就可以修改我们的头标题
来自该链接:QtPropertyBrowser 头标题修改

参考博客:
QtPropertyBrowser 简单属性值 使用 一
QtPropertyBrowser 键值长度错误 修改
QtPropertyBrowser 使用 二
QtPropertyBrowser 自定义类型

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/115095
推荐阅读
相关标签
  

闽ICP备14008679号