Qt 中的 QListWidget、QTreeWidget 和 QTableWidget:简化的数据展示控件

Qt 中的 QListWidget、QTreeWidget 和 QTableWidget:简化的数据展示控件

在 Qt 的用户界面开发中,展示和管理数据是常见的需求。Qt 提供了丰富的控件供开发者选择,其中 QListWidgetQTreeWidgetQTableWidget 是三个高层封装控件,专为简化常见的数据展示场景而设计。与 QListViewQTreeViewQTableView 这些基于模型/视图架构的视图控件不同,QListWidgetQTreeWidgetQTableWidget 内置了数据模型,使得它们在处理简单数据展示时更为直接、易用。

本文将介绍这三个控件的特点、常见用途以及它们的用法示例,帮助开发者在合适的场景中选择和使用这些控件。

一、QListWidget——简化的列表控件

QListWidget 是用于展示和管理列表数据的控件。它是 QListView 的高级封装版本,内置了项(Item)模型,使开发者不必单独设置数据模型。你可以直接向 QListWidget 添加、删除和管理项目,适用于简单的一维列表展示。

特点和功能
  • 简单的项操作:可以直接使用 addItemtakeItem 等方法添加和删除列表项,而无需管理数据模型。
  • 支持多选和单选:轻松设置是否允许用户选择多个项目,适用于需要选择多个选项的场景。
  • 自定义项展示:不仅可以展示文本,还可以在每个项中显示图标或自定义控件。
示例代码
#include <QApplication>
#include <QListWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建 QListWidgetQListWidget listWidget;// 添加项目listWidget.addItem("Item 1");listWidget.addItem("Item 2");listWidget.addItem("Item 3");// 显示 QListWidgetlistWidget.show();return app.exec();
}

代码运行截图:

在这个简单的例子中,QListWidget 被用于展示一个简单的项目列表,开发者只需使用 addItem 即可轻松向列表中添加项目。

常用方法
  • addItem(const QString &text):向列表中添加文本项目。
  • addItems(const QStringList &texts):批量添加多个文本项目。
  • takeItem(int row):移除列表中的某个项目。

二、QTreeWidget——树状结构展示控件

QTreeWidget 是用于显示层次结构数据的控件,类似于 QTreeView,但提供了更加简便的项管理方式。它内置了树形数据结构,允许开发者直接添加父项和子项,适合用于展示复杂的层次化数据,比如文件系统或分类结构。

特点和功能
  • 父子关系:允许开发者直接添加父子节点,树形结构清晰明了。
  • 支持多列数据:可以为每个节点设置多个列,适合展示多维数据。
  • 支持展开/折叠操作:允许用户展开和折叠树节点,便于处理大规模数据。
示例代码
#include <QApplication>
#include <QTreeWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建 QTreeWidgetQTreeWidget treeWidget;treeWidget.setColumnCount(1);treeWidget.setHeaderLabel("Regions");// 创建父项QTreeWidgetItem *americaItem = new QTreeWidgetItem(&treeWidget);americaItem->setText(0, "America");// 创建子项QTreeWidgetItem *usaItem = new QTreeWidgetItem(americaItem);usaItem->setText(0, "USA");QTreeWidgetItem *canadaItem = new QTreeWidgetItem(americaItem);canadaItem->setText(0, "Canada");// 显示 QTreeWidgettreeWidget.show();return app.exec();
}

代码运行截图:

该示例展示了如何使用 QTreeWidget 创建一个简单的树形结构,父节点和子节点可以通过简单的 QTreeWidgetItem 操作来管理。

常用方法
  • addTopLevelItem(QTreeWidgetItem *item):向树视图中添加顶层项。
  • setHeaderLabel(const QString &label):设置树视图的表头标签。
  • takeTopLevelItem(int index):移除顶层项。

三、QTableWidget——表格数据展示控件

QTableWidget 是一个用于展示二维表格数据的控件。它是 QTableView 的高级封装,内置了单元格的项模型,允许开发者直接设置每个单元格的内容,而不需要单独创建数据模型。它适合用于展示小型的表格数据,如简单的电子表格或配置表格。

特点和功能
  • 直接操作单元格:开发者可以通过 setItem 直接在指定的行和列设置单元格内容。
  • 支持多选:可以选择单个单元格、整行或整列,适合表格数据的操作场景。
  • 自定义单元格显示:单元格可以显示文本、图像或其他自定义控件。
示例代码
#include <QApplication>
#include <QTableWidget>
#include <QTableWidgetItem>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建 QTableWidget,指定行数和列数QTableWidget tableWidget(3, 3);// 设置表格的内容for (int row = 0; row < 3; ++row) {for (int col = 0; col < 3; ++col) {QTableWidgetItem *item = new QTableWidgetItem(QString("Item %1").arg(row * 3 + col + 1));tableWidget.setItem(row, col, item);}}// 显示 QTableWidgettableWidget.show();return app.exec();
}

代码运行效果图:

在这个示例中,QTableWidget 用于创建一个 3x3 的表格,开发者可以使用 setItem 方法轻松设置表格单元格的内容。

常用方法
  • setItem(int row, int column, QTableWidgetItem *item):设置指定行和列的单元格内容。
  • item(int row, int column):获取某个单元格的数据项。
  • setHorizontalHeaderLabels(const QStringList &labels):设置表头标签。

四、总结

QListWidgetQTreeWidgetQTableWidget 都是基于 Qt 的高级封装控件,提供了更为直接的项操作方式。这些控件的共同特点是:

  • 项模型封装:不需要单独设置模型,直接通过项(QListWidgetItemQTreeWidgetItemQTableWidgetItem)管理数据。
  • 简化操作:与 QListViewQTreeViewQTableView 等纯视图控件相比,它们的使用更为简单,适合小型数据集或简单展示需求。
  • 适用场景:适用于不需要复杂数据模型、或数据量较小的应用场景。

在需要更复杂的数据展示和交互时,QListViewQTreeViewQTableView 等基于模型/视图架构的控件可能是更好的选择。对于初学者或开发简单应用,这些高级封装控件提供了一个快速上手、简便高效的解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/436800.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue实现文件解压缩

1. 使用CompressionStream API实现压缩 这里开启了多线程解压缩 <template><div class"page"><input type"file" placeholder"选择文件" id"file" /><button click"compress(compress)">压缩<…

uplink 级联口

Uplink 播报编辑讨论上传视频 交换机上的一种端口 展开2个同名词条 本词条缺少概述图&#xff0c;补充相关内容使词条更完整&#xff0c;还能快速升级&#xff0c;赶紧来编辑吧&#xff01; 在点到多点系统中&#xff0c;由分散点到集中点的传输链路。例如&#xff1a;在移动…

yolov8训练数据集——labelme的json文件转txt文件

yolov8的环境搭建&#xff0c;参考&#xff1a;Home - Ultralytics YOLO Docs 1.把标注好的json文件和jpg放同一个目录下。 2.运行转换脚本文件labelme2yolo.py文件&#xff1a; # -*- coding: utf-8 -*-import os import numpy as np import json from glob import glob im…

【C#】CacheManager:高效的 .NET 缓存管理库

在现代应用开发中&#xff0c;缓存是提升性能和降低数据库负载的重要技术手段。无论是 Web 应用、桌面应用还是移动应用&#xff0c;缓存都能够帮助减少重复的数据查询和处理&#xff0c;从而提高系统的响应速度。然而&#xff0c;管理缓存并不简单&#xff0c;尤其是当你需要处…

Linux-基础实操篇-组管理和权限管理(上)

Linux 组基本介绍 在 linux 中的每个用户必须属于一个组&#xff0c;不能独立于组外。在 linux 中每个文件 有所有者、所在组、其它组的概念。 用户和组的基本概念&#xff1a; 用户名&#xff1a;用来识别用户的名称&#xff0c;可以是字母、数字组成的字符串&#xff0…

基于yolo11的工地钢筋检测计数训练、应用系统

基于yolo11的工地钢筋检测计数应用系统 基于yolo11的工地钢筋检测计数训练系统 yolov8/9/10/11模型在工地钢筋检测计数中的应用【代码数据集python环境训练/应用GUI系统】 背景意义 多数钢厂和工地普遍依靠人工来统计成捆钢筋的根数&#xff0c;这种方式不仅机械枯燥、劳动强度…

深入掌握 Protobuf 与 RPC 的高效结合:实现C++工程中的高效通信

目录 一、Protobuf与RPC框架的通信流程概述二、Protobuf与RPC在C中的实际应用2.1 定义 .proto 文件2.2 编译 .proto 文件生成C代码2.3 实现服务器端逻辑2.4 实现客户端逻辑2.5 使用CMake构建工程2.6 编译与运行2.7 关键组件解析2.8 序列化与反序列化的实现 三、关键实现与解析四…

帝都程序猿十二时辰

前言 2019年度国产剧《长安十二时辰》火了&#xff0c;其口碑榜首、节奏紧凑、贴合原著、电影质感&#xff0c;都是这部剧的亮点。而最令人震撼的还是剧中对大唐盛世的还原&#xff0c;长安街坊的市容市貌、长安百姓的生活日常、长安风情的美轮美奂……而关于十二时辰的话题也接…

Unity 2D RPG Kit 学习笔记

学习资料&#xff1a; B站教学视频&#xff1a;https://www.bilibili.com/video/BV1dC4y1o7A5?p1&vd_source707ec8983cc32e6e065d5496a7f79ee6 2D RPG Kit Documentation.pdf文档 1、2D RPG Kit Documentation文档 1.1、Scenes/TitleScreen 开始菜单工程 1.2、https://it…

C++语言学习(3): type 的概念

type 的概念 C中的变量拥有类型&#xff0c; 这是显然的。 实际上&#xff0c;每个 object&#xff0c; 每个 reference&#xff0c; 每个 function&#xff0c; 每个 expression &#xff0c; 都有对应的 type &#xff08;类型&#xff09;&#xff1a; Each object, refer…

【SQL】有至少五名直接下属的经理

目录 语法 需求 示例 分析 代码 语法 SELECT columns FROM table1 JOIN table2 ON table1.common_column table2.common_column; 在数据库管理和编程中&#xff0c;JOIN 是一种用于结合来自两个或多个表的数据的 SQL 操作。通过使用 JOIN&#xff0c;你可以根据两个表中的…

vue3 + ts 二次封装 el-menu

实现效果&#xff1a; 1. types / menu.ts export interface MenuItem {index: string,label: string,icon?: string,disabled?: boolean,children?: MenuItem[], }2. components / CustomMenu / index.vue <template><el-menu :default-active"defaultActi…

10.2 Linux_并发_进程相关函数

创建子进程 函数声明如下&#xff1a; pid_t fork(void); 返回值&#xff1a;失败返回-1&#xff0c;成功返回两次&#xff0c;子进程获得0(系统分配)&#xff0c;父进程获得子进程的pid 注意&#xff1a;fork创建子进程&#xff0c;实际上就是将父进程复制一遍作为子进程&…

傅里叶级数在机器人中的应用(动力学参数辨识)

B站首发&#xff01;草履虫都能看懂的【傅里叶变换】讲解&#xff0c;清华大学李永乐老师教你如何理解傅里叶变换&#xff0c;辨清美颜和变声原理&#xff0c;&#xff01;&#xff01;_哔哩哔哩_bilibiliB站首发&#xff01;草履虫都能看懂的【傅里叶变换】讲解&#xff0c;清…

Mac屏蔽系统更新,取出红点标记如果解锁hosts文件

引言&#xff1a;关闭系统更新&#xff0c;首先应该在系统偏好设置---软件更新---去掉自动更新的选项。即使如此&#xff0c;系统仍然进行macOS系统和自带safari等软件的检测更新&#xff0c;并图标右上角红点点标记提醒我们更新&#xff0c;那我们如果彻底屏蔽更新呢&#xff…

监控告警功能详细介绍及操作演示:运维团队的智能保障

在当今这个信息化高速发展的时代&#xff0c;运维团队面临着前所未有的挑战。为了确保系统的稳定性和高效运维&#xff0c;监控告警功能成为了运维团队不可或缺的得力助手。本文将详细介绍我们的监控告警功能&#xff0c;并结合实际操作页面进行演示&#xff0c;帮助运维团队更…

828华为云征文|部署在线文档应用程序 CodeX Docs

828华为云征文&#xff5c;部署在线文档应用程序 CodeX Docs 一、Flexus云服务器X实例介绍二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置2.4 Docker 环境搭建 三、Flexus云服务器X实例部署 CodeX Docs3.1 CodeX Docs 介绍3.2 CodeX Docs 部署3.3 CodeX…

AI产品经理PRD文档与传统产品经理PRD有什么不同呢?

目录 模型输出&#xff1a;说白了&#xff0c;就是你的AI要干啥数据接入&#xff1a;你的AI要吃啥“粮食”验收标准&#xff1a;怎么判断你的AI干得好不好经验总结 你好&#xff0c;我是三桥君 在工作中&#xff0c;当我作为传统产品经理时&#xff0c;通常只需提供产品需求文…

解决 Adobe 盗版弹窗

在这个文件夹下删除 Adobe CCXProcess 然后重装。 Adobe Premiere Pro 2024 (v24.6.1) Multilingual :: Варез от m0nkrusa [Warez by m0nkrus] (monkrus.ws) Adobe Photoshop 2024 (v25.12) Multilingual :: Варез от m0nkrusa [Warez by m0nkrus] (monkrus.…