QTreeWidget勾选QTreeWidgetItem的处理

关于QTreeWidget的setData函数 阅读详情

1. 简介

QTreeWidget提供许多自身状态改变信号,但是缺少了一种常用的信号:勾选其中某一项时的信号(使用的QTreeWidgetItem是可以Check的,通过setCheckState设置)

没有Check信号时,可以使用void itemChanged(QTreeWidgetItem * item, int column) 这个信号,但是这个信号的触发情况太多,随便选择一项(并不是勾选,而是某一项被选中[类似于Windows中全选的那种反色显示的效果])也会触发,在代码中调用某些接口也会导致这个信号被触发。导致代码逻辑中会处理大量避免循环调用的情况,并不是很方便。为此可以为QTreeWidget添加勾选信号。

2. 设置

通过继承QTreeWidget和QTreeWidgetItem定义这两个类,提供信号和数据处理的设置,步骤如下:

2.1 继承QTreeWidget定义check信号

需要从QTreeWidget定义一个信号,代码如下:

class TestWidgetTree : public QTreeWidget
{
	Q_OBJECT

public:
	TestWidgetTree (QWidget * parent = 0) : QTreeWidget(parent){}
	~TestWidgetTree (){ }

signals:
	void itemCheckStateChanged(ThreeDTreeWidgetItem*, bool);
};

2.2 继承QTreeWidgetItem定义setData

class TestTreeWidgetItem : public QTreeWidgetItem
{
public:
	TestTreeWidgetItem ();

	TestTreeWidgetItem (int type = Type) :QTreeWidgetItem(type){ }
	TestTreeWidgetItem (const QStringList & strings, int type = Type) : QTreeWidgetItem(strings, type){ }
	TestTreeWidgetItem (QTreeWidget * parent, int type = Type) : QTreeWidgetItem(parent, type){}
	TestTreeWidgetItem (QTreeWidget * parent, const QStringList & strings, int type = Type) 
		:QTreeWidgetItem(parent, strings, type){}
	TestTreeWidgetItem (QTreeWidget * parent, QTreeWidgetItem * preceding, int type = Type) 
		: QTreeWidgetItem(parent, preceding, type){}
	TestTreeWidgetItem (QTreeWidgetItem * parent, int type = Type) :QTreeWidgetItem(parent, type){}
	TestTreeWidgetItem (QTreeWidgetItem * parent, const QStringList & strings, int type = Type) 
		:QTreeWidgetItem(parent, strings, type){}
	TestTreeWidgetItem (QTreeWidgetItem * parent, QTreeWidgetItem * preceding, int type = Type) 
		:QTreeWidgetItem(parent, preceding, type){}

	~TestTreeWidgetItem (){}

	void setData(int column, int role, const QVariant& value);
};

void TestTreeWidgetItem ::setData(int column, int role, const QVariant& value)
{
	const bool isCheckChange = column == 0
		&& role == Qt::CheckStateRole
		&& data(column, role).isValid() // Don't "change" during initialization
		&& checkState(0) != value;
	QTreeWidgetItem::setData(column, role, value);
	if (isCheckChange) {
		TestWidgetTree *tree = static_cast<TestWidgetTree *>(treeWidget());
		emit tree->itemCheckStateChanged(this, checkState(0) == Qt::Checked);
	}
}

3. 使用

在使用的时候非常简单,在构建树结构的时候需要使用我们定义的TestTreeWidget控件,并且它的Item都要使用 TestTreeWidgetItem之后就可以使用TestTreeWidget的 itemCheckStateChanged信号

	connect(_treeWidget3D, SIGNAL(itemCheckStateChanged(ThreeDTreeWidgetItem*, bool)), 
		this, SLOT(itemCheckStateChangedSlot(ThreeDTreeWidgetItem*, bool)));

实现插槽函数 itemCheckStateChangedSlot

void MyMainWindow::itemCheckStateChangedSlot(TestTreeWidgetItem* item, bool isChecked)
{
	if (!item)
		return;

	if (item->isDisabled() || item->flags() == Qt::NoItemFlags)
		return;

	if (isChecked)
	{
		//do some stuff when item is checked.
	}
	else
	{
		//do some stuff when item is unchecked.
	}
}

4. 参考资料

1.QTreeWidget Class

2.Is it possible to create a signal for when a QTreeWidgetItem checkbox is toggled?

QTreeWidget优化树节点的三种选择状态:勾选、半选、不勾选,且可以互斥选择 当顶层节点有多个时,实现了顶层节点相互之间互斥选择1 阅读详情

相关推荐

展示文件系统及勾选联动——Qt

通过Qt展示文件系统及勾选联动

xiaopei_yan的博客 1158

Qt5.5.0 qtreewidget添加复选框且实现多级联动

其实非常简单,就在新new qtreewidgetitem对象时setCheckState(0,Qr::Checked)和setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnable|Qt::ItemIsSelectable|Qt::ItemIsTrisate)两个值就可以了 其中最重要的是Qt::ItemIsTrisate,为复选框多级联动状态 QTreeWidget *a=new QTreeWidget(this); QTreeWidgetItem

啵啵啵啵博客 1949

第二十二章、 Model/View便利类树型部件QTreeWidget

一、概述 树部件(Tree Widget)是Qt Designer中 Item Widgets(Item-Based)部件中提供的一个Model/View便利部件,对应类为QTreeWidget类。 QTreeWidget类从QTreeView派生,是一个Model/View便利类,提供一个树状管理数据的界面视图,为了快速支持树状视图展示数据,在类内使用了默认内置的树状模型保存数据项,每个数据项的...

老猿Python 2076

QTreeWidget中setData怎么干

struct User:public QObjectUserData { QString imgpath; int itemtype; }; Q_DECLARE_METATYPE(User) QTreeWidget *tree = new QTreeWidget; tree->setColumnCount(1); tree->setHeaderLabel("标题"); QTreeWidgetItem *item = new QTreeWidgetItem(0); item-.

高恩阳的博客 6404

全面掌握QTreeWidget:创建、添加与删除操作指南

在Qt框架中,信号与槽(Signals and Slots)机制是核心特性之一,允许对象间的通信。当某个事件发生时,发出一个信号(Signal),与其相连的槽(Slot)函数随后被调用。这种机制非常灵活,可以处理各种类型的事件,如用户输入、系统事件、定时器事件等。要实现自定义绘制,我们需要重写的paintEvent方法。这允许我们在控件的绘制过程中注入自定义逻辑。// 自定义绘制的代码在上述代码中,我们使用了QPainter对象在控件上绘制图形。对象用于设置绘制参数。

weixin_42466723的博客 1318

QTreeWidgetItem的setData(int column,int role,QVariant& data)等,

Qt中QVariant是多种类型的联合,QVariant类中有个SetValue(T& value)方法,将自定义 T 类型的数据保存到QVariant对象中,可以理解为是自定义类型被封装成了QVariant的形式,这样,我们自定义的T类型的对象就能够通过所有参数和返回值为QVarian类型传递。比如QTableWidgetItem的setData(int column,QVariant& data)和QTreeWidgetItem的setData(int column,int role,QVariant& data)等,通过setData函数我们可以为每个单元格保存自己想绑定的数据及为每个树节点保存想绑定的自定义类型的数据。   但是,QVariant中的setValue方法的使用有个前提,就是我们自定义的类型要能被Qt所识别。那该怎样识别呢?   这就要用到宏定义Q_DECLARE_METATYPE了,通过这个宏定义可以将自定义的类型注册到Qt的元类型中,从而被Qt识别,通常在自定义类型定义之后使用。

【QT学习七】QTreeWidget

QTreeWidget是Qt中一个用于显示树形结构数据的控件,它继承自QTreeView,可以显示多列数据和树形结构的层次关系,还提供了许多交互功能。可以支持单选、多选和可编辑的节点,还可以自定义节点的样式和布局。除此之外,QTreeWidget 还支持信号和槽机制,可以方便地处理节点的操作事件,如点击、双击、选择等等。头文件: #include <QTreeWidget>继承: QTreeViewQTreeWidget 的节点可以根据需求进行自定义样式的设置。

从此不归路 1万+

基于halcon的HSV颜色匹配实例

HSV颜色识别原图代码结果 原图 代码 dev_update_off () dev_close_window () *颜色数组 FuseColors := ['Orange','Red','Blue','Yellow','Green'] *画笔颜色数组 DisplayColors := ['coral','red','blue','goldenrod','forest green'] * HSV模型中H分量: Orange 10-30, Red 0-10,Blue 125-162,Yellow 3

qq_39467811的博客 3544

QTreeWidgetItem类

> ​QTreeWidgetItem为使用QTreeWidget类提供一个方便的项(item)。

floatBit的专栏 1278

T265摄像头插着开机后,需要重新插拔才能正常启动

T265摄像头插着开机后,需要重新插拔才能正常启动

qq_35598561的博客 1079

华为AR3260路由器NAT回流配置实战:从WEB界面到命令行的完整避坑指南

本文详细解析了华为AR3260路由器NAT回流(Hairpin NAT)的配置原理与实战方法。针对内网用户无法通过公网地址访问内部服务器的常见问题,文章不仅剖析了WEB界面配置的常见报错原因,更提供了清晰、可靠且一劳永逸的命令行(CLI)配置方案与排错指南,帮助企业网络工程师彻底解决内外网访问不一致的难题。

u6v7w8x的博客 874

QTreeWidget 简介

QTreeWidget简介 QTreeWidget 类根据预设的模型提供树形显示控件。 QTreeWidget 使用类似于 QListView 类的方式提供一种典型的基于 item 的树形交互方法类,该类基于QT的“模型/视图”结构,提供了默认的模型来支撑 item 的显示,这些 item 类为 QTreeWidgetItem 类。 如果不需要灵活的“模型/视图”框架,可以使用QTreeWidge...

mrbbcool的博客 4700

Jetson Orin Nano GPIO 实战,用 devmem 玩转 Pinmux 引脚复用配置

devmem 是一个直接读写寄存器的工具,通过 mmap 将 /dev/mem 中的物理地址区域映射到用户空间进程地址空间,从而实现直接读写,正常情况下在 /dev 下可以看到 mem。可以看到对应 bit5 bit6 分别为 1,对应配置为 E_IO_HV 为 ENABLE 以及 E_INPUT 为 ENABLE。需要 TRM 手册查看相关寄存器,以及安装 busybox,busybox 内置了 devmem。根据 TRM 手册,找到 I2C_SDA 的 pinmux 地址偏移是 0x18。

darcsdn 1644

解引用QTreeWidget类型的迭代器指针,为什么会返回QTreeWidgetItem类型

方法来获取迭代器,‌这些迭代器指向的是QTreeWidget中的节点。‌通过解引用这些迭代器,‌我们可以访问到具体的QTreeWidgetItem对象,‌对其进行操作或获取其信息。‌这种设计使得我们可以方便地处理和操作QTreeWidget中的数据,‌无论是读取还是修改,‌都是基于QTreeWidgetItem对象进行的。‌因此,‌当我们解引用指向QTreeWidget的迭代器时,‌我们实际上是在访问QTreeWidget中的某个节点,‌这个节点的类型是QTreeWidgetItem。

zxf347085420的博客 497

三菱 FX5U PLC 4轴程序 控制松下伺服3个, 步进电机一个

三菱 FX5U PLC 4轴程序。 控制松下伺服3个, 步进电机一个, 四轴自动堆垛码垛设备程序, 回原点动作用专用的原点回归指令写的, 手动运行用三菱相对定位指令写的 , 自动运行用绝对定位指令写的取料运行, 表格定位写的自动放料运行, 设备各种报警异常都有写出 程序每一步都有注释。 包括PLC程序、显控触摸屏 程序、松下伺服驱动器接线图。 程序内都有IO注释 编号:4816635519484681汇美0808 ...

m0_68069172的博客 3381

大语言模型(LLM)在组合优化中的新突破:LLM-LNS与FunSearch性能对比

本文深入探讨了大语言模型(LLM)在组合优化中的创新应用,重点对比了LLM-LNS与FunSearch两种方法的性能差异。研究表明,LLM-LNS在物流路径规划、资源调度等场景中展现出显著优势,其双层自演化架构能有效平衡探索与利用,相比传统方法提升效率约43%。文章还提供了实践选择指南,帮助开发者根据具体需求选用合适的技术方案。

weixin_42526415的博客 406

如何隐藏QTreeWidgetItem 的checkbox,且当没有勾选QTreeWidget的子节点时,对话框的Ok按钮禁用,有勾选的,则高亮启用

没有勾选 勾选 此电脑,是根节点QTreeWidgetItem,当item->setData(0, Qt::CheckStateRole, QVariant());后就会隐藏checkBox item->setCheckState(0, Qt::PartiallyChecked); item->setCheckState(0, Qt::Unchecked)...

slfkj的博客 3328

把 ABAP 采购订单增强做成一条可控流水线:BAdI ME_PROCESS_PO_CUST 全流程实战

摘要: SAP MM模块的ME_PROCESS_PO_CUST BAdI提供了采购订单全生命周期的增强点,覆盖从ME2*N事务到BAPI调用的各类场景。该接口通过INITIALIZE、OPEN、PROCESS_*系列方法、CHECK等组成完整处理流水线,支持字段控制、业务校验、数据派生等功能。关键注意事项包括:PROCESS_*方法仅在相关对象变更时触发、字段控制需区分参考键与动态规则、避免递归调用等。该BAdI采用面向对象设计,通过IF_PURCHASE_ORDER_*等接口操作采购单据对象,而非直接修改

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 404

PyQt5树形结构控件QTreeWidget操作

QTreeWidget 类根据预设的模型提供树形显示控件。 QTreeWidget 使用类似于 QListView 类的方式提供一种典型的基于 item 的树形交互方法类,该类基于QT的“模型/视图”结构,提供了默认的模型来支撑 item 的显示,这些 item 类为 QTreeWidgetItem 类。 如果不需要灵活的“模型/视图”框架,可以使用QTreeWidget 来创建有层级关系的树形结构。当把标准 item 模型结合 QTreeView 使用时,可以得到更灵活的使用方法,从而把“数据”和“显示”

星如雨落 1万+

【数据集】中国广泛时空水质数据集(1980-2022)

简介中国广泛时空水质数据集(1980-2022)

WW、forever的博客 3995

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

PyQt(Python+Qt)学习随笔:QTreeWidget树型部件中的QTreeWidgetItem项构造方法

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTreeWidget树型部件的项是单独的类对象,这个类就是QTreeWidgetItem。 QTreeWidgetItem的构造方法如下: QTreeWidgetItem(type: int = QTreeWidgetItem.Type) QTreeWidgetItem(label:Iter...

老猿Python 2187

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

QT QTreeWidget 实现模糊查询和多选的勾选状态

#QT QTreeWidget 实现模糊查询和勾选状态 本文的主要代码基本都是总结2篇博客实现了模糊查询模糊查询和勾选状态QTreeWidget实现勾选基本上所有的操作都是递归操作,个人测试了性能,如果1w项左右的数据时,没啥问题,如果有几w,那么勾选所有的,效率很慢,需要几秒钟,大家可以测试,不废话了,直接上代码:如果有啥不懂的,可以在留言,会很详细的给出解释的 以下是头文件, #ifndef CTREEWEIGHTWITHSEARCH_H #define CTREEWEIGHTWITHSEARCH_H

C++ 开发者的博客 2823

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Qt常用控件之树形QTreeWidget

表示一个树形控件,里面的每一个元素,都是一个类型的对象,每个都可以包含多个文本和图标,每个文本或图标为一个列。需要注意的是,向用户屏蔽了根节点,也就是说,QTreeWidget。

laimaxgg 1601

QTreeWidget

2、connect 是Qt中的一个重要函数,用于在Python版本的Qt应用中建立连接(Connection),使得当某个信号(Signal)发出时,会自动调用相应的槽(Slot)。这是事件驱动编程的核心,允许组件之间的通信,比如按钮点击触发回调函数处理。1、QTreeWidgetItem 是 Qt 开发框架中的一个重要组件,它主要用于表示树形视图中的节点。在 QTreeWidget 这样的控件中,每个节点都是 QTreeWidgetItem 的实例,可以包含文本、图标以及其他数据。

dreamliweiming的博客 1422

QTreeWidget实现多节点拖拽

QTreeWidget实现多节点拖拽 1.重载QTreeWidget这个类,在构造函数设置多选节点: //按 ctrl 或 shift 多选 this->setSelectionMode(QAbstractItemView::ExtendedSelection); //设置可拖拽性质 this->setDefaultDropAction(Qt::MoveAction); this-&g...

Mark_1995的博客 2893

Qt QTreeWidget树形结构怎么实现

Qt QTreeWidget树形结构怎么实现

m0_60259116的博客 1441
上一篇: OpenThreads库介绍——Barrier
下一篇: 说说SIGCLD和SIGCHLD
csxiaoshui
博客等级 码龄16年 873粉丝 158原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值