QListWidget开发详解

QListWidget开发详解

  • 一、QListWidget基本使用
    • 1.1 创建 `QListWidget`
    • 1.2 QListWidget添加项
    • 1.3 QListWidget删除项
    • 1.4 QListWidget获取和设置项
  • 二、QListWidget响应用户交互
    • 2.1 QListWidget的单击响应
    • 2.3 QListWidget的 currentItemChanged
    • 2.3 QListWidget的右键餐单
  • 三、QListWidget和QTableWidget区别
    • 3.1 QListWidget
    • 3.2 QTableWidget
    • 3.3 对比总结

QListWidget 是 Qt 提供的一个用于显示和管理列表项的控件。它是 QListView 的子类,并且集成了 QListViewQStandardItemModel 的功能,使得使用起来更加方便。以下是 QListWidget 开发的详细介绍,包括基本使用方法、添加和删除项、响应用户交互等。

一、QListWidget基本使用

1.1 创建 QListWidget

QListWidget *listWidget = new QListWidget(this);

1.2 QListWidget添加项

有多种方式可以向 QListWidget 添加项:

  • 添加单个项:
listWidget->addItem("Item 1");
listWidget->addItem("Item 2");
  • 添加多个项:
QStringList items;
items << "Item 3" << "Item 4" << "Item 5";
listWidget->addItems(items);
  • 使用 QListWidgetItem 添加项:
QListWidgetItem *item = new QListWidgetItem("Item 6");
listWidget->addItem(item);

1.3 QListWidget删除项

  • 删除单个项:
delete listWidget->takeItem(listWidget->row(item)); // 删除指定项
  • 删除当前选中的项:
delete listWidget->takeItem(listWidget->currentRow());

1.4 QListWidget获取和设置项

  • 获取当前选中的项:
QListWidgetItem *currentItem = listWidget->currentItem();
if (currentItem) {qDebug() << "Current item:" << currentItem->text();
}
  • 设置项的文本:
QListWidgetItem *item = listWidget->item(0); // 获取第一个项
if (item) {item->setText("New Text");
}

二、QListWidget响应用户交互

2.1 QListWidget的单击响应

QListWidget 中实现单击响应,可以使用 itemClicked 信号。这个信号会在用户单击列表项时发射,并传递被单击的 QListWidgetItem 对象。通过连接该信号到槽函数,就可以在单击时执行相应的操作。

下面是一个示例,展示如何在 QListWidget 中实现单击响应,并显示被单击的项的文本:

#include <QListWidget>
#include <QVBoxLayout>
#include <QMessageBox>
#include <QWidget>
#include <QApplication>class MainWindow : public QWidget
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr) : QWidget(parent){// 创建 QListWidget 并添加一些项QListWidget *listWidget = new QListWidget(this);listWidget->addItem("Item 1");listWidget->addItem("Item 2");listWidget->addItem("Item 3");// 将 itemClicked 信号连接到自定义槽函数connect(listWidget, &QListWidget::itemClicked, this, &MainWindow::onItemClicked);// 布局设置QVBoxLayout *layout = new QVBoxLayout(this);layout->addWidget(listWidget);setLayout(layout);}private slots:// 自定义槽函数,处理单击事件void onItemClicked(QListWidgetItem *item){QMessageBox::information(this, "Item Clicked", "You clicked: " + item->text());}
};int main(int argc, char *argv[])
{QApplication app(argc, argv);MainWindow window;window.show();return app.exec();
}#include "main.moc"
  • 详细说明
  1. 创建 QListWidget 并添加项

    QListWidget *listWidget = new QListWidget(this);
    listWidget->addItem("Item 1");
    listWidget->addItem("Item 2");
    listWidget->addItem("Item 3");
    
  2. 连接 itemClicked 信号到槽函数

    connect(listWidget, &QListWidget::itemClicked, this, &MainWindow::onItemClicked);
    
  3. 定义槽函数

    void onItemClicked(QListWidgetItem *item)
    {QMessageBox::information(this, "Item Clicked", "You clicked: " + item->text());
    }
    
  4. 显示窗口

    int main(int argc, char *argv[])
    {QApplication app(argc, argv);MainWindow window;window.show();return app.exec();
    }
    

2.3 QListWidget的 currentItemChanged

2.3 QListWidget的右键餐单

要在 QListWidget 上实现右键菜单操作,可以通过以下步骤完成:

  1. 创建右键菜单: 在需要右键菜单的地方创建一个 QMenu 对象,并添加菜单项。
  2. 连接信号与槽:QListWidgetcustomContextMenuRequested 信号连接到一个槽函数,该函数在用户请求自定义上下文菜单时触发。
  3. 显示菜单: 在槽函数中根据需要显示右键菜单。

下面是一个简单的示例,演示如何实现这些步骤:

#include <QtWidgets>class MyListWidget : public QListWidget {
public:MyListWidget(QWidget *parent = nullptr) : QListWidget(parent) {// 添加一些项作为示例addItem("Item 1");addItem("Item 2");addItem("Item 3");// 连接右键菜单请求信号connect(this, &QListWidget::customContextMenuRequested, this, &MyListWidget::showContextMenu);}private:void showContextMenu(const QPoint &pos) {QMenu contextMenu(tr("Context menu"), this);QAction *action1 = new QAction("Action 1", this);connect(action1, &QAction::triggered, this, &MyListWidget::action1Clicked);contextMenu.addAction(action1);QAction *action2 = new QAction("Action 2", this);connect(action2, &QAction::triggered, this, &MyListWidget::action2Clicked);contextMenu.addAction(action2);contextMenu.exec(mapToGlobal(pos));}void action1Clicked() {qDebug() << "Action 1 clicked!";}void action2Clicked() {qDebug() << "Action 2 clicked!";}
};int main(int argc, char *argv[]) {QApplication app(argc, argv);MyListWidget listWidget;listWidget.show();return app.exec();
}

在这个示例中,我们创建了一个自定义的 MyListWidget 类,继承自 QListWidget。在构造函数中,我们添加了几个项作为示例,并连接了 customContextMenuRequested 信号到 showContextMenu 槽函数。在 showContextMenu 函数中,我们创建了一个 QMenu 对象,并添加了两个动作 Action 1Action 2,并分别连接到 action1Clickedaction2Clicked 槽函数。

当用户在 QListWidget 上右键单击时,会触发 customContextMenuRequested 信号,从而显示我们创建的右键菜单。

三、QListWidget和QTableWidget区别

QListWidgetQTableWidget 是 Qt 中用于显示和管理数据的两种不同类型的控件。它们的主要区别在于数据的组织和显示方式。

3.1 QListWidget

QListWidget 是一个单列的列表控件,适用于显示简单的列表数据。每个列表项是一个 QListWidgetItem 对象,可以包含文本、图标等。以下是 QListWidget 的一些特点:

  1. 单列显示QListWidget 只能显示一列数据,每个项是一个独立的对象。
  2. 简单数据展示:适用于展示简单的、独立的列表项,例如任务列表、联系人列表等。
  3. 操作简便:提供了方便的接口用于添加、删除、修改和获取列表项。
  • 使用示例:
#include <QListWidget>
#include <QVBoxLayout>
#include <QWidget>QListWidget *listWidget = new QListWidget(this);
listWidget->addItem("Item 1");
listWidget->addItem("Item 2");
listWidget->addItem("Item 3");QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(listWidget);
setLayout(layout);

3.2 QTableWidget

QTableWidget 是一个表格控件,适用于显示多行多列的数据。每个单元格是一个 QTableWidgetItem 对象,可以包含文本、图标等。以下是 QTableWidget 的一些特点:

  1. 多行多列显示QTableWidget 可以显示多行多列的数据,类似于电子表格。
  2. 复杂数据展示:适用于展示结构化的、多维度的数据,例如财务报表、商品清单等。
  3. 灵活操作:提供了丰富的接口用于添加、删除、修改和获取单元格数据,还可以设置单元格的样式和属性。
  • 使用示例:
#include <QTableWidget>
#include <QVBoxLayout>
#include <QWidget>QTableWidget *tableWidget = new QTableWidget(3, 2, this);
tableWidget->setHorizontalHeaderLabels(QStringList() << "Column 1" << "Column 2");tableWidget->setItem(0, 0, new QTableWidgetItem("Item 1-1"));
tableWidget->setItem(0, 1, new QTableWidgetItem("Item 1-2"));
tableWidget->setItem(1, 0, new QTableWidgetItem("Item 2-1"));
tableWidget->setItem(1, 1, new QTableWidgetItem("Item 2-2"));QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(tableWidget);
setLayout(layout);

3.3 对比总结

  • 数据组织方式

    • QListWidget:单列数据,每个项是独立的。
    • QTableWidget:多行多列数据,每个单元格都是独立的,可以有行和列的交互。
  • 适用场景

    • QListWidget:适用于简单的列表数据,例如文件列表、任务列表。
    • QTableWidget:适用于复杂的表格数据,例如财务报表、学生成绩表。
  • 操作复杂度

    • QListWidget:操作简单,接口直接,适合快速开发和简单数据展示。
    • QTableWidget:操作相对复杂,提供了更丰富的接口和更大的灵活性。

选择 QListWidget 还是 QTableWidget 主要取决于数据的结构和展示需求。如果需要展示简单的列表数据,可以选择 QListWidget;如果需要展示复杂的表格数据,可以选择 QTableWidget

其他QT文章
1. QT开发环境安装以配置。
2. QT线段画板实战
3. 半小时玩转QT桌面系统托盘(含托盘消息)
4. QT入门开发一个时钟
5. 半小时教你做大转盘游戏(QT篇)
6. 手把手教你制作【带吸附效果的线段绘制】(QT)
7. 手把手教你开发-滚动效果号码抽奖(QT)
8. 100行代码实现贪吃蛇小游戏
9.C++实现《扫雷》游戏(入门经典)
10. svg转图片工具开发
11. Qt网路与通信(获取本机网络信息)
12. Qt网路与通信(UDP客户与服务)
13. Qt网络与通信(TCP聊天室)
14. Qt多线程以及线程池
15. Qt散点图、折线图、柱状图、盒须图、饼状图、雷达图开发实例
16. 取色器(QT)
17. MQTT客户端入门开发
18.QT文件上传带进度条实例(含源码)
19. Qt音乐播放器开发实例(可毕设含源码)
20. Qt学生管理系统-- 数据库课程设计(付源码)

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

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

相关文章

开源智能助手平台Dify是什么?

1.背景 对于国内小公司&#xff0c;怎样通过Ai 将内部流程、产品重新做一次&#xff0c;从而提高人效、给客户带来价值&#xff0c;这是老板们在考虑的问题 &#xff1f; 当前市面上的你大模型例如&#xff1a;通义千问、文心一言、kimi、智谱清言、盘古 等&#xff0c;底层能…

MySQL8的备份方案——差异备份(CentOS)

MySQL8的差异备份 一、安装备份工具二、备份数据三、准备恢复所需的备份数据四、 恢复备份文件 点击跳转全量(完全)备份 点击跳转增量备份 点击跳转压缩备份 一、安装备份工具 官网 下载地址 备份所用工具为percona-xtrabackup 如果下方安装工具的教程失效&#xff0c;请点击…

JavaWeb服务器-Tomcat(Tomcat概述、Tomcat的下载、安装与卸载、启动与关闭、常见的问题)

Tomcat概述 Tomcat服务器软件是一个免费的开源的web应用服务器。是Apache软件基金会的一个核心项目。由Apache&#xff0c;Sun和其他一些公司及个人共同开发而成。 由于Tomcat只支持Servlet/JSP少量JavaEE规范&#xff0c;所以是一个开源免费的轻量级Web服务器。 JavaEE规范&…

Android init.rc如何并行执行任务

Android开机优化系列文档-CSDN博客 Android 14 开机时间优化措施汇总-CSDN博客Android 14 开机时间优化措施-CSDN博客根据systrace报告优化系统时需要关注的指标和优化策略-CSDN博客Android系统上常见的性能优化工具-CSDN博客Android上如何使用perfetto分析systrace-CSDN博客A…

python-网络并发模型

3. 网络并发模型 3.1 网络并发模型概述 什么是网络并发 在实际工作中&#xff0c;一个服务端程序往往要应对多个客户端同时发起访问的情况。如果让服务端程序能够更好的同时满足更多客户端网络请求的情形&#xff0c;这就是并发网络模型。 循环网络模型问题 循环网络模型只能…

逻辑回归损失函数

文章目录 1.基础简析交叉熵损失函数&#xff08;Cross-Entropy Loss&#xff09;对数似然损失函数&#xff08;Log-Likelihood Loss&#xff09; 2.关键步骤3.案例 1.基础简析 逻辑回归&#xff08;Logistic Regression&#xff09;是一种广泛应用于分类问题的统计模型&#x…

C++进阶 继承

目录 继承的概念及定义 继承概念 继承定义 定义格式 继承关系和访问限定符 继承基类成员访问方式的变化 基类和派生类对象赋值转换 继承中的作用域 派生类的默认成员函数 构造函数 拷贝构造函数 赋值运算符重载 析构函数 总结 继承与友元 继承与静态成员 浅谈复杂…

Scott Brinker:消除噪音越来越难?这是一个越来越有效的营销渠道

合作伙伴成为更有效的渠道 对于普通读者来说&#xff0c;我看好生态系统并不奇怪。我一直主张&#xff0c;平台生态系统可以解决不断变化、高度多样化的市场格局中的许多挑战。这也是我在HubSpot和公司的技术合作伙伴生态系统所关注的。 在本月早些时候的文章中&#xff0c;我…

SpringMVC源码深度解析(中)

接上一遍博客《SpringMVC源码深度解析(上)》继续聊。最后聊到了SpringMVC的九大组建的初始化&#xff0c;以 HandlerMapping为例&#xff0c;SpringMVC提供了三个实现了&#xff0c;分别是&#xff1a;BeanNameUrlHandlerMapping、RequestMappingHandlerMapping、RouterFunctio…

AI一站式科研写作利器:PaperPal

文章目录 在线编辑Word 插件 在线编辑 PaperPal是一款面向科研人员的写作工具&#xff0c;支持在线编辑以及Word插件。下面以在线编辑为例&#xff0c;详述PaperPal的润色功能。 进入网页后&#xff0c;点击【新建在线文档】&#xff0c;即可开启润色功能&#xff0c;界面如下…

《昇思25天学习打卡营第24天|基于 MindSpore 实现 BERT 对话情绪识别》

1. BERT 模型概述 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是一个预训练的语言表示模型&#xff0c;可以应用于多种自然语言处理任务&#xff0c;包括对话情绪识别。BERT 通过双向 Transformer 编码器&#xff0c;能同时考虑句子…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 图像物体的边界(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

红尘阡陌:相遇与分离的交织,在这纷繁复杂的尘世间,阡陌纵横,每一条道路都承载着无数的故事,有相遇的欣喜,亦有分离的哀伤

红尘阡陌:相遇与分离的交织,在这纷繁复杂的尘世间,阡陌纵横,每一条道路都承载着无数的故事,有相遇的欣喜,亦有分离的哀伤。相遇,宛如璀璨星辰划过夜空,瞬间点亮了生命的黑暗;分离,却似深秋的寒风,无情地吹落了曾经繁茂的枝叶。 有些人的出现,如同春日里的暖阳,猝…

ultralytics-yolov8

yolov8 安装环境 装pytorch conda install pytorch1.12.1 torchvision0.13.1 torchaudio0.12.1 cudatoolkit11.6 -c pytorch -c conda-forge安装用到的包 requirements.txt ultralytics tqdm scikit-learn pyaml shapely pyclipper scikit-image imgaug lmdb tqdm rapidfuz…

word 设置目录中英文字母大写改为小写

选中目录右击“字体”&#xff0c;设置“小型大写字母”。

【Vue3】工程创建及目录说明

【Vue3】工程创建及目录说明 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日…

【LeetCode】从中序与后序遍历序列构造二叉树

目录 一、题目二、解法完整代码 一、题目 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7], …

谷粒商城实战笔记-40-前端基础-Vue-计算属性、监听器、过滤器

文章目录 一&#xff0c;计算属性1&#xff0c;用途2&#xff0c;用法2.1 定义View2.2 声明计算属性 3&#xff0c;注意事项 二&#xff0c;监听器1. 使用 watch 监听属性的变化 三&#xff0c;过滤器1&#xff0c;定义局部过滤器2&#xff0c;定义全局过滤器3&#xff0c;使用…

Perl 基础语法

Perl 基础语法 Perl 是一种高级、解释型、动态编程语言&#xff0c;广泛用于CGI脚本、系统管理、网络编程、以及其他领域。Perl 以其强大的文本处理能力和简洁的语法而闻名。本文将详细介绍 Perl 的基础语法&#xff0c;帮助读者快速入门。 1. Perl 变量和数据类型 1.1 变量…

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(六)-无人机直接C2通信

目录 引言 5.4 直接C2通信 5.4.1 概述 5.4.2 A2X直接C2通信服务的授权策略 5.4.3 USS使用A2X直接C2通信服务的C2授权程序 5.4.4 直接C2通信建立程序 引言 3GPP TS 23.256 技术规范&#xff0c;主要定义了3GPP系统对无人机&#xff08;UAV&#xff09;的连接性、身份识别…