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);

}

}

```

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

相关推荐
Thomas_YXQ12 分钟前
Unity3D IK解算器技术分析
开发语言·搜索引擎·unity·全文检索·unity3d·lucene
机器视觉知识推荐、就业指导12 分钟前
开源QML控件:进度条滑动控件(含源码下载链接)
前端·qt·开源·qml
DolphinScheduler社区34 分钟前
白鲸开源WhaleStudio与崖山数据库管理系统YashanDB完成产品兼容互认证
数据库·开源·认证·崖山数据库·白鲸开源
liuweidong080236 分钟前
【Pandas】pandas DataFrame rsub
开发语言·python·pandas
阑梦清川41 分钟前
AI超级智能体项目教程(二)---后端项目初始化(设计knif4j接口文档的使用)
java·前端·数据库
hotlinhao41 分钟前
ThinkPHP6模型中多组条件逻辑或Or查询的使用
linux·服务器·数据库
jack xu11 小时前
高频面试题:如何保证数据库和es数据一致性
java·大数据·数据库·mysql·elasticsearch
Pocker_Spades_A1 小时前
金仓数据库征文-政务领域国产化数据库更替:金仓 KingbaseES 应用实践
数据库·政务·金仓数据库 2025 征文·数据库平替用金仓
whoarethenext1 小时前
c++的jsoncpp使用
开发语言·c++·jsoncpp
niuTaylor1 小时前
Linux驱动开发快速上手指南:从理论到实战
linux·运维·开发语言·驱动开发·c#