Qt QTreeWidget 总结

news/2025/2/25 4:03:25

Qt QTreeWidget 总结

1. 概述
  • QTreeWidget 是 Qt 中用于显示树形结构的控件,继承自 QTreeView,但提供了更简单的接口。
  • 适合展示层级数据(如文件目录、组织结构)。
  • 每个节点是 QTreeWidgetItem 对象,支持文本、图标、复选框等。

2. 基本使用
创建与初始化
QTreeWidget *treeWidget = new QTreeWidget(parent);
treeWidget->setColumnCount(2); // 设置列数
treeWidget->setHeaderLabels({"Name", "Type"}); // 设置表头
添加项
// 添加顶层项
QTreeWidgetItem *topItem = new QTreeWidgetItem(treeWidget);
topItem->setText(0, "Root");
topItem->setIcon(0, QIcon(":/icon.png"));

// 添加子项
QTreeWidgetItem *childItem = new QTreeWidgetItem(topItem);
childItem->setText(0, "Child");
childItem->setCheckState(0, Qt::Checked); // 复选框

3. 常用方法
方法描述
addTopLevelItem(QTreeWidgetItem*)添加顶层项
insertTopLevelItem(int, QTreeWidgetItem*)插入顶层项到指定位置
takeTopLevelItem(int)移除并返回顶层项
currentItem()获取当前选中项
expandItem(QTreeWidgetItem*)展开节点
collapseItem(QTreeWidgetItem*)折叠节点
setItemWidget(QTreeWidgetItem*, int, QWidget*)为项添加自定义控件(如按钮)
遍历项
QTreeWidgetItemIterator it(treeWidget);
while (*it) {
    qDebug() << (*it)->text(0);
    ++it;
}

4. 信号与槽
  • 常用信号
    • itemClicked(QTreeWidgetItem*, int):点击项触发。
    • itemDoubleClicked(QTreeWidgetItem*, int):双击项触发。
    • itemChanged(QTreeWidgetItem*, int):项内容变化触发(如复选框状态)。
示例:响应点击事件
connect(treeWidget, &QTreeWidget::itemClicked, [](QTreeWidgetItem *item, int column) {
    qDebug() << "Clicked:" << item->text(column);
});

5. 样式与定制
使用 QSS 美化
treeWidget->setStyleSheet(
    "QTreeWidget { background: #f0f0f0; }"
    "QTreeWidget::item:hover { background: yellow; }"
    "QTreeWidget::item:selected { background: blue; color: white; }"
);
自定义项外观
QTreeWidgetItem *item = new QTreeWidgetItem();
item->setForeground(0, QBrush(Qt::red)); // 设置文本颜色
item->setBackground(1, QBrush(Qt::lightGray)); // 设置背景色

6. 完整示例
QTreeWidget *treeWidget = new QTreeWidget();
treeWidget->setColumnCount(2);
treeWidget->setHeaderLabels({"Name", "Value"});

// 添加顶层项
QTreeWidgetItem *root = new QTreeWidgetItem(treeWidget);
root->setText(0, "Settings");
root->setExpanded(true); // 默认展开

// 添加子项
QTreeWidgetItem *child = new QTreeWidgetItem(root);
child->setText(0, "Language");
child->setText(1, "English");

// 响应双击
connect(treeWidget, &QTreeWidget::itemDoubleClicked, [](QTreeWidgetItem *item, int col) {
    QMessageBox::information(nullptr, "Info", item->text(col));
});

treeWidget->show();

7. 高级功能
  • 拖放操作:通过重写 dragEnterEventdropEvent 实现。
  • 排序treeWidget->setSortingEnabled(true);
  • 自定义委托:继承 QStyledItemDelegate 实现复杂渲染或编辑。

8. 总结
  • 适用场景:快速实现树形结构展示,适合简单层级数据。
  • 性能注意:数据量过大时建议使用 QTreeView + QFileSystemModel 等模型/视图架构。
  • 扩展性:通过信号/槽和样式表灵活定制交互与外观。

http://www.niftyadmin.cn/n/5864964.html

相关文章

《鸿蒙开发-答案之书》获取视频第一帧和视频时间

《鸿蒙开发-答案之书》获取视频第一帧和视频时间 /*** 获取视频信息**let result await MySightUtil.getSightInfo(this.sightUri);*let base64 : string result[0];*let duration : number result[1]** param uri 视频地址* returns 第一个数据是缩略图 base64 字符串&…

通过AI辅助生成PPT (by quqi99)

作者&#xff1a;张华 发表于&#xff1a;2025-02-23 版权声明&#xff1a;可以任意转载&#xff0c;转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明(http://blog.csdn.net/quqi99) 问题 媳妇需要将一个pdf文件中的某些部分做成PPT课件&#xff0c;我在想是…

【Windows系统node_modules删除失败(EPERM)问题解析与应对方案】

Windows系统node_modules删除失败(EPERM)问题解析与应对方案 问题现象 当开发者尝试删除Node.js项目的node_modules目录时&#xff0c;常会遇到如下错误提示&#xff1a; [Error: EPERM: operation not permitted, unlink D:\project\...\esbuild.exe] {errno: -4048,code: …

电商运营中私域流量的转化与变现:以开源AI智能名片2+1链动模式S2B2C商城小程序为例

摘要 电商运营的核心目标在于高效地将产品推向市场&#xff0c;实现私域流量的转化和变现。本文以“罗辑思维”的电商实践为背景&#xff0c;探讨了私域流量变现的重要性&#xff0c;并深入分析了开源AI智能名片21链动模式S2B2C商城小程序在电商运营中的应用与价值。通过该模式…

【SpringMVC】概述 SSM:Spring + SpringMVC + Mybats

目录标题 0、SSM (Spring SpringMVC MyBatis)1、回顾MVC1.1、什么是MVC1.2、Model1时代1.3、Model2时代1.4、回顾Servlet 2、什么是SpringMVC2.1、概述2.2、中心控制器2.3、SpringMVC执行原理 0、SSM (Spring SpringMVC MyBatis) SSM (Spring SpringMVC MyBatis) 是一个很…

CSS基础(盒子模型的组成、内容溢出、隐藏元素的方式、样式的继承、元素的默认样式、布局技巧、元素之间的空白问题、行内块元素的幽灵空白问题)

文章目录 1. 盒子模型的组成1.1 内容区1.2 默认宽度1.3 内边距1.3.1 内边距属性1.3.2 复合属性1.3.3 单位1.3.4 注意事项 1.4 边框1.4.1 边框属性1.4.2 复合属性1.4.3 单方向边框1.4.4 边框样式1.4.5 注意事项 1.5 外边距1.5.1 外边距属性1.5.2 复合属性1.5.3 注意事项 1.6 外边…

Prompt Engineering的重要性

从软件工程需求分析与大模型结合的实践角度来看&#xff0c;Prompt Engineering的重要性及其风险主要体现在以下几个方面&#xff1a; 一、Prompt Engineering的核心价值 需求语义桥接&#xff08;Requirement-Semantics Bridging&#xff09; 软件需求具有模糊性、歧义性等自…

Python常见面试题的详解16

1. 如何强行关闭客户端和服务器之间的连接&#xff1f; 在网络编程中&#xff0c;有时需要强行中断客户端和服务器之间的连接。对于基于 TCP 协议的连接&#xff0c;由于其面向连接的特性&#xff0c;需要采取特定的步骤来确保连接被正确关闭&#xff1b;而 UDP 是无连接协议&a…