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

news2024/12/26 11:53:46

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

    // 创建 QListWidget
    QListWidget listWidget;

    // 添加项目
    listWidget.addItem("Item 1");
    listWidget.addItem("Item 2");
    listWidget.addItem("Item 3");

    // 显示 QListWidget
    listWidget.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);

    // 创建 QTreeWidget
    QTreeWidget 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");

    // 显示 QTreeWidget
    treeWidget.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);
        }
    }

    // 显示 QTableWidget
    tableWidget.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.coloradmin.cn/o/2184624.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Android】布局优化—include,merge,ViewStub的使用方法

引言 1.重要性 在Android应用开发中&#xff0c;布局是用户界面的基础。一个高效的布局不仅能提升用户体验&#xff0c;还能显著改善应用的性能。随着应用功能的复杂性增加&#xff0c;布局的优化变得尤为重要。优化布局能够减少渲染时间&#xff0c;提高响应速度&#xff0c…

Vue 路由设置

为了防止遗忘&#xff0c;记录一下用Vue写前端配置路由时的过程&#xff0c;方便后续再需要用到时回忆。 一、举个例子 假如需要实现这样的界面逻辑&#xff1a; 在HomePage中有一组选项卡按钮用于导航到子页面&#xff0c;而子页面Page1中有一个按钮&#xff0c;其响应事件是…

vulnhub-Replay 1靶机

vulnhub&#xff1a;https://www.vulnhub.com/entry/replay-1,278/ 导入靶机&#xff0c;放在kali同网段&#xff0c;扫描 靶机在192.168.81.8&#xff0c;扫描端口 开启了三个端口&#xff0c;存在网站服务&#xff0c;访问 网页上有个超链接&#xff0c;点击后下载了这样一个…

嵌入式外设应用(代码)

文章目录 1. 工业自动化2. 智能家居设备3. 汽车电子4. 生命体征监测仪5. 物联网应用嵌入式外设应用广泛,有很多应用领域: 1. 工业自动化 应用场景:使用传感器监测设备状态,控制电机的启动和停止。 示例代码: #include <stdio.h> #include <stdbool.h>// 模…

农业机械检测系统源码分享

农业机械检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

spring-boot 整合 mybatis

文章目录 Spring boot 整合Mybatis将数据返回到浏览器1. 准备数据2. 导入依赖3. 配置数据库连接4. 创建一个 pojo 包&#xff0c;创建User实体类5. 创建一个mapper包&#xff0c;写一个UserMapper接口6. 创建一个service包&#xff0c;写一个UserService接口。7. 在 Service 包…

如何对大模型的回答置信度做出判断

大模型的回答置信度&#xff0c;特别是像 GPT 模型这类基于生成式预训练模型的系统&#xff0c;是一个高度复杂的概念。置信度&#xff08;confidence&#xff09;通常指模型在给定输出上有多大的确定性&#xff0c;反映的是模型对其生成的答案有多“确信”。这种置信度既可以被…

【STM32-HAL库】自发电型风速传感器(使用STM32F407ZGT6)(附带工程下载链接)

一、自发电型风速传感器介绍 自发电型风速传感器&#xff0c;也称为风力发电型风速传感器或无源风速传感器&#xff0c;是一种不需要外部电源即可工作的风速测量设备。这种传感器通常利用风力来驱动内部的发电机构&#xff0c;从而产生电能来供电测量风速的传感器部分。以下是自…

从u盘直接删除的文件能找回吗 U盘文件误删除如何恢复

U盘上的文件被删除并不意味着它们立即消失。事实上&#xff0c;删除操作只是将文件从文件系统的目录中移除&#xff0c;并标记可用空间。这意味着在文件被覆盖之前&#xff0c;它们仍然存在于存储介质上。因此&#xff0c;只要文件没有被新的数据覆盖&#xff0c;我们就有机会恢…

一本应用《软件方法》的书《软件需求分析和设计实践指南》

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 昨天看到了韩雪燕、李楠等老师写的《软件需求分析和设计实践指南》&#xff0c;前言提到了我。特别说明的是&#xff0c;这个书我自己看到的&#xff0c;韩老师等之前也未和我提过--这…

电子采购招投标比价供应商在线询价定标审批管理系统(源码)

前言&#xff1a; 随着互联网和数字技术的不断发展&#xff0c;企业采购管理逐渐走向数字化和智能化。数字化采购平台作为企业采购管理的新模式&#xff0c;能够提高采购效率、降低采购成本、优化供应商合作效率&#xff0c;已成为企业实现效益提升的关键手段。系统获取在文末…

前端组件化开发

假设这个页面是vue开发的&#xff0c;如果一整个页面都是编写在一个vue文件里面&#xff0c;后期不好维护&#xff0c;会特别的庞大&#xff0c;那么如何这个时候需要进行组件化开发。组件化开发后必然会带来一个问题需要进行组件之间的通信。组要是父子组件之间通信&#xff0…

[Linux]从零开始的网站搭建教程

一、谁适合本次教程 学习Linux已经有一阵子了&#xff0c;相信大家对LInux都有一定的认识。本次教程会教大家如何在Linux中搭建一个自己的网站并且实现内网访问。这里我们会演示在Windows中和在Linux中如何搭建自己的网站。当然&#xff0c;如果你没有Linux的基础&#xff0c;这…

【一篇文章理解Java中多级缓存的设计与实现】

文章目录 一.什么是多级缓存&#xff1f;1.本地缓存2.远程缓存3.缓存层级4.加载策略 二.适合/不适合的业务场景1.适合的业务场景2.不适合的业务场景 三.Redis与Caffine的对比1. 序列化2. 进程关系 四.各本地缓存性能测试对比报告(官方)五.本地缓存Caffine如何使用1. 引入maven依…

陶瓷4D打印有挑战,水凝胶助力新突破,复杂结构轻松造

大家好&#xff01;今天要和大家聊聊一项超酷的技术突破——《Direct 4D printing of ceramics driven by hydrogel dehydration》发表于《Nature Communications》。我们都知道4D打印很神奇&#xff0c;能让物体随环境变化而改变形状。但陶瓷因为太脆太硬&#xff0c;4D打印一…

java中创建不可变集合

一.应用场景 二.创建不可变集合的书写格式&#xff08;List&#xff0c;Set&#xff0c;Map) List集合 package com.njau.d9_immutable;import java.util.Iterator; import java.util.List;/*** 创建不可变集合:List.of()方法* "张三","李四","王五…

鸿蒙开发选择表情

鸿蒙开发选择表情 动态评论和聊天信息都需要用到表情&#xff0c;鸿蒙是没有提供的&#xff0c;得自己做 一、思路&#xff1a; 用表情字符显示表情&#xff0c;类似0x1F600代表笑脸 二、效果图&#xff1a; 三、关键代码&#xff1a; // 联系&#xff1a;893151960 Colum…

蓝桥杯【物联网】零基础到国奖之路:十五. 扩展模块之双路ADC

蓝桥杯【物联网】零基础到国奖之路:十五. 扩展模块之双路ADC 第一节 硬件解读第二节 CubeMX配置第三节 代码编写 第一节 硬件解读 STM32的ADC是12位&#xff0c;通过硬件过采样扩展到16位&#xff0c;模数转换器嵌入到STM32L071xx器件中。有16个外部通道和2个内部通道&#xf…

PDF阅读器工具集萃:满足你的多样需求

现在阅读书籍大部分都喜欢电子书的形式了吧&#xff0c;因为小小的一个设备就能存下上万本书。从流传程度来说PDF无疑是一个使用最广的格式。除了福昕PDF阅读器阅读之外还有哪些好用的阅读工具呢/&#xff1f;今天我们一起来探讨一下吧。 1.福昕阅读器 链接一下>>www.f…

css3-----2D转换、动画

2D 转换&#xff08;transform&#xff09; 转换&#xff08;transform&#xff09;是CSS3中具有颠覆性的特征之一&#xff0c;可以实现元素的位移、旋转、缩放等效果 移动&#xff1a;translate旋转&#xff1a;rotate缩放&#xff1a;scale 二维坐标系 2D 转换之移动 trans…