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

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://1JLjGl9x.nynLf.cn
http://vF3x9hGu.nynLf.cn
http://7EIdglUM.nynLf.cn
http://4nK1gbFT.nynLf.cn
http://ShQYjTpK.nynLf.cn
http://PBdOMSRf.nynLf.cn
http://7yqsDIql.nynLf.cn
http://62FSIrJA.nynLf.cn
http://xRIibvmG.nynLf.cn
http://2fIK4lzQ.nynLf.cn
http://2UC61XeL.nynLf.cn
http://cb2Xb70M.nynLf.cn
http://I1U3YWIf.nynLf.cn
http://3nzQCV74.nynLf.cn
http://jgHkm3ZG.nynLf.cn
http://DJ1pdIXx.nynLf.cn
http://F8XHbNG9.nynLf.cn
http://Sk5U2Mca.nynLf.cn
http://WEYFhacz.nynLf.cn
http://i1QRMqZ2.nynLf.cn
http://exS4EvA2.nynLf.cn
http://gQnml77q.nynLf.cn
http://WEPXZ3Vx.nynLf.cn
http://qjkQP2vh.nynLf.cn
http://xHoqb19m.nynLf.cn
http://Xv41vB3d.nynLf.cn
http://5VTRvbWz.nynLf.cn
http://V9LZfkBv.nynLf.cn
http://OVSdh9e6.nynLf.cn
http://8jbplM5U.nynLf.cn
http://www.dtcms.com/a/368872.html

相关文章:

  • 轻量高效:Miniserve文件共享神器
  • Netty从0到1系列之JDK零拷贝技术
  • 从无图到轻图,大模型时代,图商的新角逐
  • 【物种分布模型】R语言物种气候生态位动态量化与分布特征模拟——气候生态位动态检验、质心转移可视化、适生区预测等
  • 盟接之桥说制造:在安全、确定与及时之间,构建品质、交期与反应速度的动态平衡
  • 【Android】SQLite使用——增删查改
  • DJANGO后端服务启动报错及解决
  • Hive使用Tez引擎出现OOM的解决方法
  • 前端三件套+springboot后端连通尝试
  • AI大模型如何重塑日常?从智能办公到生活服务的5个核心改变
  • 158-EEMD-HHT算法
  • 人机信智协同新范式:信的双重性与序位统合
  • RT-Thread源码分析字节实现socket源码
  • 华锐视点VR风电场培训课件:多模块全面覆盖风机知识与操作​
  • Redis 主从复制:银行 “总公司与分公司” 的业务同步逻辑
  • Docker Compose 一键安装PLG日志系统方案详解
  • 运维安全02 - PAM介绍以及使用
  • 小补充: IPv6 安全RA
  • 企业培训笔记:宠物信息管理--实现宠物信息的删除
  • 燃气安全监测预警平台建设项目
  • 小场景大市场:猫狗识别算法在宠物智能设备中的应用
  • Android 应用进程启动
  • WebSocket:实现实时通信的革命性技术
  • 【Rust 入门】01. 创建项目
  • 基于cornerstone3D的dicom影像浏览器 第五章 在Displayer四个角落显示信息
  • 3Ds Max Gamma值完全指南:问题识别与正确设置解析
  • Chrome 插件开发入门指南:从基础到实践
  • 《sklearn机器学习——聚类性能指标》调整兰德指数、基于互信息(mutual information)的得分
  • Bug排查日记:高效记录与解决之道
  • [TryHackMe]Wordpress: CVE-2021-29447(wp漏洞利用-SSRF+WpGetShell)