当前位置: 首页 > ds >正文

Qt控件:Item Views/Widgets

Item

  • 1. Item Views(Model-Based)
    • 1.1 List View
  • 2. Item Widgets(Item-Based)
    • 2.1 List Widget
      • 1. 基本使用步骤
      • 2. 添加树形项(节点)
      • 3. 节点常用设置
      • 4. 信号与槽(交互处理)
      • 5. 其他常用操作
      • 5. 示例代码

1. Item Views(Model-Based)

1.1 List View

2. Item Widgets(Item-Based)

2.1 List Widget

QTreeWidget 是 Qt 中用于显示树形结构数据的控件,基于项(QTreeWidgetItem)构建,适合展示具有层级关系的数据(如文件目录、组织架构等)。以下是其核心用法:

1. 基本使用步骤

  • 步骤1:在UI中添加或代码创建QTreeWidget
    UI设计器:直接拖放 QTreeWidget 到窗口。
    代码创建

    #include <QTreeWidget>
    #include <QTreeWidgetItem>// 创建树控件
    QTreeWidget *treeWidget = new QTreeWidget(this);
    treeWidget->setGeometry(50, 50, 400, 300); // 位置和大小
    
  • 步骤2:设置列标题(可选,适用于多列树)

// 设置列数和标题(单列树可省略)
treeWidget->setColumnCount(2); // 2列
QStringList headers;
headers << "名称" << "描述";
treeWidget->setHeaderLabels(headers);

2. 添加树形项(节点)

  • 添加顶层节点(根节点)
// 创建顶层项(父节点为nullptr)
QTreeWidgetItem *parentItem = new QTreeWidgetItem(treeWidget);
parentItem->setText(0, "顶层节点1"); // 第0列文本
parentItem->setText(1, "这是顶层节点"); // 第1列文本// 或通过addTopLevelItem添加
QTreeWidgetItem *parentItem2 = new QTreeWidgetItem();
parentItem2->setText(0, "顶层节点2");
treeWidget->addTopLevelItem(parentItem2);
  • 添加子节点
// 为parentItem添加子节点
QTreeWidgetItem *childItem1 = new QTreeWidgetItem(parentItem);
childItem1->setText(0, "子节点1-1");
childItem1->setText(1, "第一个子节点");QTreeWidgetItem *childItem2 = new QTreeWidgetItem(parentItem);
childItem2->setText(0, "子节点1-2");
childItem2->setText(1, "第二个子节点");// 子节点也可以有自己的子节点(多级嵌套)
QTreeWidgetItem *grandChild = new QTreeWidgetItem(childItem1);
grandChild->setText(0, "孙节点");

3. 节点常用设置

  • 设置图标
// 为节点设置图标(需先准备QIcon)
parentItem->setIcon(0, QIcon(":/icons/folder.png")); // 第0列图标
childItem1->setIcon(0, QIcon(":/icons/file.png"));
  • 设置复选框
// 启用复选框
parentItem->setCheckState(0, Qt::Unchecked); // 第0列显示复选框,初始未选中
childItem1->setCheckState(0, Qt::Checked);// 获取复选状态
if (childItem1->checkState(0) == Qt::Checked) {// 处理选中状态
}
  • 设置可编辑
// 允许双击编辑节点文本
treeWidget->setEditTriggers(QAbstractItemView::DoubleClicked);
// 或单个节点设置
childItem1->setFlags(childItem1->flags() | Qt::ItemIsEditable);

4. 信号与槽(交互处理)

常用信号:

  • itemClicked(QTreeWidgetItem*, int):节点被点击时触发
  • itemDoubleClicked(QTreeWidgetItem*, int):节点被双击时触发
  • itemChanged(QTreeWidgetItem*, int):节点内容(如复选框)变化时触发

示例:

// 连接节点点击信号
connect(treeWidget, &QTreeWidget::itemClicked, this, [=](QTreeWidgetItem *item, int column) {QString text = item->text(0); // 获取点击节点第0列文本qDebug() << "点击了:" << text;
});// 连接复选框变化信号
connect(treeWidget, &QTreeWidget::itemChanged, this, [=](QTreeWidgetItem *item, int column) {if (item->checkState(0) == Qt::Checked) {qDebug() << item->text(0) << "被选中";}
});

5. 其他常用操作

  • 展开/折叠节点
treeWidget->expandAll(); // 展开所有节点
treeWidget->collapseAll(); // 折叠所有节点
parentItem->setExpanded(true); // 单独展开某个节点
  • 获取选中节点
// 获取当前选中的节点(单个)
QTreeWidgetItem *selectedItem = treeWidget->currentItem();
if (selectedItem) {qDebug() << "当前选中:" << selectedItem->text(0);
}// 获取所有选中的节点(需开启多选模式)
treeWidget->setSelectionMode(QAbstractItemView::MultiSelection);
QList<QTreeWidgetItem*> selectedItems = treeWidget->selectedItems();
  • 删除节点
// 删除指定节点(父节点的takeChild方法)
int index = parentItem->indexOfChild(childItem1);
delete parentItem->takeChild(index);// 清空所有节点
treeWidget->clear();

5. 示例代码

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);setWindowTitle("QTreeWidget示例");// 创建树控件QTreeWidget *treeWidget = new QTreeWidget(this);treeWidget->setGeometry(20, 20, 500, 400);// 设置列标题treeWidget->setColumnCount(2);treeWidget->setHeaderLabels(QStringList() << "项目" << "信息");// 添加顶层节点QTreeWidgetItem *root1 = new QTreeWidgetItem(treeWidget);root1->setText(0, "文件夹A");root1->setIcon(0, QIcon(":/icons/folder.png"));QTreeWidgetItem *root2 = new QTreeWidgetItem(treeWidget);root2->setText(0, "文件夹B");root2->setIcon(0, QIcon(":/icons/folder.png"));// 添加子节点QTreeWidgetItem *child1 = new QTreeWidgetItem(root1);child1->setText(0, "文件1.txt");child1->setText(1, "文本文件");child1->setIcon(0, QIcon(":/icons/file.png"));child1->setCheckState(0, Qt::Unchecked);QTreeWidgetItem *child2 = new QTreeWidgetItem(root1);child2->setText(0, "文件2.jpg");child2->setText(1, "图片文件");child2->setIcon(0, QIcon(":/icons/image.png"));child2->setCheckState(0, Qt::Unchecked);// 展开所有节点treeWidget->expandAll();// 连接点击信号connect(treeWidget, &QTreeWidget::itemClicked, this, [=](QTreeWidgetItem *item, int column) {qDebug() << "点击了:" << item->text(0) << ",列:" << column;});
}MainWindow::~MainWindow()
{delete ui;
}

QTreeWidget 适合快速构建树形界面,通过 QTreeWidgetItem 管理节点,支持多级嵌套、图标、复选框等功能。若需更灵活的数据模型(如动态数据或自定义结构),可考虑使用 QTreeView + QAbstractItemModel 组合,而 QTreeWidget 更适合简单场景。

http://www.xdnf.cn/news/20402.html

相关文章:

  • 国产数据库之YashanDB:新花怒放
  • 源滚滚AI编程SillyTavern酒馆配置Claude Code API教程
  • DeepSeek vs Anthropic:技术路线的正面冲突
  • Java基础 9.5
  • centos 系统如何安装open jdk 8
  • linux下快捷删除单词、行的命令
  • python中等难度面试题(1)
  • 基于cornerstone3D的dicom影像浏览器 第五章 在Displayer四个角落显示信息
  • C++数据结构命名:从规范到艺术的深度解析
  • CSDN个人博客文章全面优化过程
  • 不同行业视角下的数据分析
  • 计算机二级C语言操作题(填空、修改、设计题)——真题库(17)附解析答案
  • 打开Fiddler,浏览器就不能访问网页了
  • 超细汇总,银行测试-大额存单定期存款测试+面试(一)
  • 深度学习:归一化技术
  • Transformers 学习入门:注意力机制剖析
  • 行业了解05:制造业
  • 新启航开启深孔测量新纪元:激光频率梳技术攻克光学遮挡,达 130mm 深度 2μm 精度
  • Day21_【机器学习—决策树(1)—信息增益、信息增益率、基尼系数】
  • docker-compose跨节点部署Elasticsearch 9.X集群
  • 快速进行光伏设计的好方法!
  • 仓颉编程语言青少年基础教程:布尔类型、元组类型
  • 计算机网络IP协议
  • STM32H7的PA0_C、PA1_C、PC2_C、PC3_C的使用
  • Java线程池的几个常见问题
  • 会员体系搭建咋做?定位目标人群竟有这么多讲究
  • GJOI 9.4 题解
  • Qt---JSON处理体系
  • LeetCode_位运算
  • 安卓学习 之 EditText 控件