解锁Qt QListWidget的全部潜力——用最佳实践和技巧赢得用户的喜爱和赞誉!

news/2024/12/5 8:27:00/

文章目录

  • 前言
  • 一、属性和方法
    • 添加列表项
    • 获取当前选中的列表项
    • 删除列表项
    • 列表显示模式
    • 交替背景色
  • 二、信号与槽
    • 选中的行数变化
    • item被点击
  • 三、解决icon图标模式下图标不对称的问题
    • 1、设置属性
    • 2、面向结果的手动换行
  • 总结


前言

在现代的GUI应用程序中,列表框是必不可少的一部分。它们可以用于许多用途,例如显示文件列表、产品列表、任务列表等等。QListWidget是基于Qt框架的一个通用列表框,QListWidget提供了一种简单而易用的方式来显示一个项目列表。因此,掌握QListWidget的使用方法可以让您在开发GUI应用程序方面更具有竞争力。


一、属性和方法

QListWidget 有很多属性和方法,完整的可查看帮助文档。这里列出常用的属性和方法:

添加列表项

// 在尾部添加
void addItem(const QString &label)//添加一个QString当作列表项
void addItem(QListWidgetItem *item)//添加一个列表项
void addItems(const QStringList &labels)//添加一系列的列表项// 在指定行之前添加
void insertItem(int row, QListWidgetItem *item)
void insertItem(int row, const QString &label)
void insertItems(int row, const QStringList &labels)    

使用包含 QListWidgetItem 参数的函数,可以为条目指定图标

QListWidgetItem::QListWidgetItem(const QIcon &icon, const QString &text, QListWidget *parent = nullptr, int type = Type)

参数分别为:item图标,item text,item的父类(当指定了父类,可以不用addItem/insertItem),类型(可以不用管)

获取当前选中的列表项

QListWidget->currentItem();//返回当前选中的列表项
QListWidget->currentRow();//获取当前选中item的行数

删除列表项

// 方法一
QListWidgetItem* item = ui->QListWidget->currentItem();
ui->lwProvince->removeItemWidget(item);
delete item;// 方法二
int row = ui->QListWidget->currentRow();
QListWidgetItem* item = ui->QListWidget->takeItem(row);//在列表上不显示指定行数的item并返回他
delete item;

注:removeItemWidget参数需要QListWidgetItem 而 takeItem需要指定的row。

列表显示模式

// 获取和设置显示模式
QListView::ViewMode viewMode() const
void setViewMode(QListView::ViewMode mode)

其中,QListView::ViewMode 是一个枚举,有两个取值:
QListView::ListMode 列表模式
在这里插入图片描述

QListView::IconMode 图标模式

在这里插入图片描述

一个有趣的拖动:
当我们设置成图标显示的时候,我们可以同过拖拽把item拖拽到不同的位置。

交替背景色

设置相邻行交替显示不同的背景色,便于显示和浏览时的定位

// 获取和设置交替显示
bool alternatingRowColors() const
void setAlternatingRowColors(bool enable)//enable是否开启

设置前:
在这里插入图片描述

设置后:
在这里插入图片描述

二、信号与槽

选中的行数变化

currentRowChanged(int)

当选中的行数变化时发送

item被点击

单击时发送下面的信号:

itemClicked(QListWidgetItem *)

双击发送下面的信号:

itemDoubleClicked(QListWidgetItem *)

三、解决icon图标模式下图标不对称的问题

1、设置属性

在这里插入图片描述
设置 gridSize 中的宽度后,图标对齐了。但是由于宽度设置的较小,文字没有完全显示.此时我们可以调整宽度。如果你们觉得不是很美观,可以继续微调,我在这里就不多赘述了!

2、面向结果的手动换行

QString text = "新疆\n维吾尔\n自治区";
QListWidgetItem *item = new QListWidgetItem(icon, text);
ui->QListWidget->addItem(item);

总结

QListWidget是Qt框架中一个非常有用的列表框。它可以被用于多种场景,支持各种常见的列表项动作以及实现自定义的交互操作。在本文中,我们深入研究了QListWidget的主要特性,包括如何添加项目,如何处理交互事件,以及如何使用高级功能如项目选择和信号槽机制。通过阅读并尝试理解本文所述内容,您可以更好地掌握QListWidget并使用它来构建功能丰富的GUI应用程序。


http://www.ppmy.cn/news/107756.html

相关文章

lmsys.org最新的LLM排行榜

lmsys.org Large Model Systems Organization (LMSYS Org) 是一个开放的研究组织,由加州大学伯克利分校的学生和教师与加州大学圣地亚哥分校和卡内基梅隆大学合作创立。 他们的目标是通过共同开发开放数据集、模型、系统和评估工具,让每个人都能访问大…

如何通过自学成为一名白帽黑客(网安工程师)

从事网络安全这么多年,总是会被问到很多奇奇怪怪的问题: 「叔叔,我Steam账号被盗了,能帮忙找回吗?我给你发红包」 「我的手机被监控了,生活和工作受到了严重影响,该怎么解决?」 「…

Mapbox GL在Vue项目中的应用(综合demo)

Mapbox GL在Vue项目中的应用 1、Mapbox简介2、vue项目mapboxgl案例2.1 实现的功能2.2 具体代码2.3 YOUR_PLAYBACK_INTERVA的含义 1、Mapbox简介 MapboxGL是一个强大的JavaScript库,用于创建交互式和可自定义的地图。它基于WebGL构建,能够在浏览器中高效地…

云原生之部署Docker轻量级管理面板EasyDockerWeb

云原生之部署Docker轻量级管理面板EasyDockerWeb 一、EasyDockerWeb介绍1. EasyDockerWeb简介2. 环境要求3. EasyDockerWeb特点 二、本地环境介绍1. 本地环境规划2. 本次实践介绍 三、本地环境检查1.检查Docker服务状态2. 检查Docker版本 四、下载EasyDockerWeb镜像五、部署Eas…

SpringMVC数据传递相关注解扩展

一、SpringMVC 获取请求参数 (六)、接收复杂数据类型 Request processing failed; nested exception is java.lang.IllegalStateException: No primary or single unique constructor found for interface java.util.List --> 未加RequestBody注解…

C# 事件(event)

目录 一、概述 二、事件和委托的区别 委托和事件的概念 委托和事件的作用 委托和事件的区别 三、事件的基本用法 结束 一、概述 事件是一种特殊的多播委托,仅可以从声明事件的类(或派生类)或结构(发布服务器类&#xff09…

IntersectionObserver实现无线滚动和懒加载

最近发现一个有意思的Web API IntersectionObserver 和大家分享一下 IntersectionObserver 可以用于检测元素是否进入视口,可以用于实现无限滚动、懒加载等功能。 使用场景:在Web应用中,可能需要实现无限滚动、懒加载等功能,使用…

windows环境, nginx https配置

在 Windows 环境下配置 Nginx 的 HTTPS,需要以下步骤: 1. 安装 OpenSSL 首先需要安装 OpenSSL,可以从官网下载 Windows 版本的 OpenSSL,然后解压到某个目录下,比如 C:\OpenSSL-Win64。 2. 生成 SSL 证书和私钥 使用…