Qt 控件编程实践技巧

Qt 基础

```cpp

QTreeWidgetItem *subitem22 = new QTreeWidgetItem(group2);

subitem22->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);

subitem22->setText(0, "subitem22");

subitem22->setCheckState(0, Qt::Unchecked);

QTreeWidgetItem *subitem23 = new QTreeWidgetItem(group2);

subitem23->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);

subitem23->setText(0, "subitem23");

subitem23->setCheckState(0, Qt::Unchecked);

void Widget::treeitemChanged(QTreeWidgetItem* item, int column)

{

QString itemText = item->text(0);

// 选中时

if (Qt::Checked == item->checkState(0))

{

QTreeWidgetItem* parent = item->parent();

int count = item->childCount();

if (count > 0)

{

for (int i = 0; i < count; i++)

{

// 子节点也选中

item->child(i)->setCheckState(0, Qt::Checked);

}

}

else

{

// 是子节点

updateParentItem(item);

}

}

else if (Qt::Unchecked == item->checkState(0))

{

int count = item->childCount();

if (count > 0)

{

for (int i = 0; i < count; i++)

{

item->child(i)->setCheckState(0, Qt::Unchecked);

}

}

else

{

updateParentItem(item);

}

}

}

Qt5 模板库、工具类及控件

```cpp

void Widget::updateParentItem(QTreeWidgetItem* item)

{

QTreeWidgetItem *parent = item->parent();

if (parent == NULL)

{

return;

}

// 选中的子节点个数

int selectedCount = 0;

int childCount = parent->childCount();

for (int i = 0; i < childCount; i++)

{

QTreeWidgetItem *childItem = parent->child(i);

if (childItem->checkState(0) == Qt::Checked)

{

selectedCount++;

}

}

if (selectedCount <= 0)

{

// 未选中状态

parent->setCheckState(0, Qt::Unchecked);

}

else if (selectedCount > 0 && selectedCount < childCount)

{

// 部分选中状态

parent->setCheckState(0, Qt::PartiallyChecked);

}

else if (selectedCount == childCount)

{

// 全部选中状态

parent->setCheckState(0, Qt::Checked);

}

}

```

请注意,以上代码是对您提供的内容进行整理后的部分代码示例,并不具备可编译性。您可以根据这些示例结合您的项目需求进行适当的修改和使用。

相关推荐
是苏浙8 分钟前
零基础入门C语言之C语言实现数据结构之栈
c语言·开发语言·数据结构
后端小张12 分钟前
【JAVA 进阶】SpringBoot 事务深度解析:从理论到实践的完整指南
java·开发语言·spring boot·后端·spring·spring cloud·事务
合作小小程序员小小店13 分钟前
web网页开发,在线%宠物销售%系统,基于Idea,html,css,jQuery,java,ssh,mysql。
java·前端·数据库·mysql·jdk·intellij-idea·宠物
不知更鸟14 分钟前
Django 的配置文件 INSTALLED_APPS
数据库·sqlite
合作小小程序员小小店29 分钟前
web网页开发,在线%物流配送管理%系统,基于Idea,html,css,jQuery,java,ssh,mysql。
java·前端·css·数据库·jdk·html·intellij-idea
2501_9411429331 分钟前
基于区块链的数字身份管理:探索安全与隐私的未来
网络·数据库·人工智能
y***548838 分钟前
C++在游戏引擎中的开发
开发语言·c++·游戏引擎
郝学胜-神的一滴43 分钟前
Python高级编程技术深度解析与实战指南
开发语言·python·程序人生·个人开发
charlie1145141911 小时前
使用 Poetry + VS Code 创建你的第一个 Flask 工程
开发语言·笔记·后端·python·学习·flask·教程
Codeking__1 小时前
查缺补漏c语言——c标准字符串函数
c语言·开发语言