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

Qt QListWidget列表框控件

文章目录

  • 1 属性和方法
    • 1.1 外观
    • 1.2 添加条目
    • 1.3 删除条目
    • 1.4 信号和槽
  • 2 实例
    • 2.1 布局
    • 2.2 代码实现

Qt中的列表框控件,对应的类是QListWidget

它用于显示多个列表项,列表项对应的类是QListWidgetitem

1 属性和方法

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

1.1 外观

列表框控件,支持两种显示模式:列表模式和图标模式

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

其中,QListView::ViewMode是一个枚举,有两个取值:

  • ListView::ListMode 列表模式

    在这里插入图片描述

  • QListView::lconMode 图标模式

    在这里插入图片描述

该属性既可以在属性窗口中设置,也可以在代码中动态设置

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

// 获取和设置交替显示 
bool alternatingRowColors() const;
void setAlternatingRowColors(bool enable);

使能了交替显示的效果:

在这里插入图片描述

未使能交替显示的效果:

在这里插入图片描述

1.2 添加条目

既可以在UI设计师界面添加,也可以通过代码动态添加

UI设计师界面添加:右键列表框控件,选择【编辑项目】,在打开的对话框中添加和删除条目

在这里插入图片描述

在代码中,动态添加条目:

// 在尾部添加
void addItem(const QString &label);
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);

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

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

1.3 删除条目

列表框中的条目可以删除,以下以删除当前行为例:

// 方法一 
QListWidgetItem *item = ui->lwProvince->currentItem();
ui->lwPrivince->removeItemWidget(item);
delete item;// 方法二
int row = ui->lwProvince->currentRow();
QListWidgetItem *item = ui->lwProvince->takeItem(row);
delete item;

注意:需要手动 delete 掉条目

1.4 信号和槽

当然了,列表控件的信号和槽有很多,大家需要用到其他信号槽时,直接去查看官方文档即可。

// 当条目被单击时,发射该信号
void itemClicked(QListWidgetItem *item);// 当条目被双击时, 发射该信号
void itemDoubleClicked(QListWidgetItem *item);

2 实例

本实例展示列表框的插入和删除操作、修改操作、显示模式

在这里插入图片描述

2.1 布局

在Ul设计师界面,拖拽对应的控件,修改显示的文字、控件的name,然后完成布局

在这里插入图片描述

2.2 代码实现

// 在Widget.h 
#ifndef WIDGET_H
#define WIDGET_H#include <QButtonGroup>
#include <QIcon>
#include <QListWidgetItem>
#include <QRandomGenerator>
#include <QStringList>
#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent = nullptr);void onRadioButtonClicked();void onItemClicked(QListWidgetItem *);void onItemDoubleClicked(QListWidgetItem *);void onBtnAddClicked();void onBtnInsertClicked();void onBtnDeleteClicked();~Widget();private:Ui::Widget *ui;QButtonGroup *mBtnGroup;QStringList *iconStringList;
};
#endif  // WIDGET_H// 在Widget.cpp
#include "widget.h"#include "ui_widget.h"Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);// 设置显示模式mBtnGroup = new QButtonGroup(this);mBtnGroup->addButton(ui->rbListMode, 0);mBtnGroup->addButton(ui->rbIconMode, 1);connect(ui->rbListMode, &QRadioButton::clicked, this,&Widget::onRadioButtonClicked);connect(ui->rbIconMode, &QRadioButton::clicked, this,&Widget::onRadioButtonClicked);ui->rbListMode->setChecked(true);ui->lwProvince->setViewMode(QListView::ListMode);// 单击和双击信号和槽connect(ui->lwProvince, &QListWidget::itemClicked, this,&Widget::onItemClicked);connect(ui->lwProvince, &QListWidget::itemDoubleClicked, this,&Widget::onItemDoubleClicked);// 添加 删除 插入connect(ui->btnAdd, &QPushButton::clicked, this, &Widget::onBtnAddClicked);connect(ui->btnInsert, &QPushButton::clicked, this,&Widget::onBtnInsertClicked);connect(ui->btnDelete, &QPushButton::clicked, this,&Widget::onBtnDeleteClicked);iconStringList = new QStringList{":/res/favicon.ico", ":/res/favicon1.ico"};
}void Widget::onRadioButtonClicked() {int checkedId = mBtnGroup->checkedId();if (checkedId == 0) {// 列表模式ui->lwProvince->setViewMode(QListView::ListMode);} else if (checkedId == 1) {// 图标模式ui->lwProvince->setViewMode(QListView::IconMode);}
}void Widget::onItemClicked(QListWidgetItem *item) {// 将条目显示到文本框里面ui->leCurrentItem->setText(item->text());
}void Widget::onItemDoubleClicked(QListWidgetItem *item) {// 实现双击可编辑item->setFlags(Qt::ItemIsEditable | Qt::ItemIsSelectable |Qt::ItemIsEnabled);
}void Widget::onBtnAddClicked() {int iconIndex = QRandomGenerator::global()->generate() % 2;QIcon icon((*iconStringList)[iconIndex]);// 获取文本输入框内容QString text = ui->leInput->text();QListWidgetItem *item = new QListWidgetItem(icon, text);ui->lwProvince->addItem(item);
}void Widget::onBtnInsertClicked() {int iconIndex = QRandomGenerator::global()->generate() % 2;QIcon icon((*iconStringList)[iconIndex]);// 获取文本输入框内容QString text = ui->leInput->text();QListWidgetItem *item = new QListWidgetItem(icon, text);// ui->lwProvince->addItem(item);// 获取当前选中行int currentRow = ui->lwProvince->currentRow();ui->lwProvince->insertItem(currentRow, item);
}void Widget::onBtnDeleteClicked() {// 获取当前选中的条目// QListWidgetItem *item = ui->lwProvince->currentItem();// ui->lwProvince->removeItemWidget(item);// delete item;// 获取当前选中行int currentRow = ui->lwProvince->currentRow();// 拿取当前行QListWidgetItem *item = ui->lwProvince->takeItem(currentRow);delete item;
}Widget::~Widget() {delete ui;
}

相关文章:

Qt QListWidget列表框控件

文章目录 1 属性和方法1.1 外观1.2 添加条目1.3 删除条目1.4 信号和槽 2 实例2.1 布局2.2 代码实现 Qt中的列表框控件&#xff0c;对应的类是QListWidget 它用于显示多个列表项&#xff0c;列表项对应的类是QListWidgetitem 1 属性和方法 QListWidget有很多属性和方法&#xf…...

小知识分享2

文章目录 1.TCP/IP协议2.四次挥手断开连接3.TCP的三次握手和四次挥手4.在什么情况下需要设置WINS Proxy&#xff1f;5.用户与用户账户有什么不同&#xff1f;为什么需要使用用户账户&#xff1f; 1.TCP/IP协议 1、TCP/IP、Transmission Control Protocol/internet Protocol,传…...

【Golang开源项目】Golang高性能内存缓存库BigCache设计与分析

项目地址 BigCache 是一个快速&#xff0c;支持并发访问&#xff0c;自淘汰的内存型缓存&#xff0c;可以在存储大量元素时依然保持高性能。BigCache将元素保存在堆上却避免了GC的开销。 背景介绍 BigCache的作者在项目里遇到了如下的需求&#xff1a; 支持http协议支持 10…...

Elasticsearch 7.8.0从入门到精通

安装Elasticsearch 7.8.0 官网&#xff1a;Elasticsearch 7.8.0 | Elastic 大家下载所需要的安装包即可。然后解压缩&#xff1a; Elasticsearch是通过java编写的&#xff0c;所以自带jdk。多好&#xff0c;下载Elasticsearch赠送jdk 0.0&#xff0c;不过一般我们用自己的jdk…...

寻找最富裕的小家庭 - 华为OD统一考试

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 在一棵树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为一个小家庭现给你一棵树,请计算出最富裕的小家庭的财富和。 输入描述 第一行为一个数N,…...

ssm基于Java的药店药品信息管理系统的设计与实现论文

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;药品信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不能满足广大…...

Word插件-大珩助手-手写电子签名

手写签名 支持鼠标写&#xff0c;支持触摸屏写&#xff0c;点击画笔按钮切换橡皮擦&#xff0c;支持清空画板重写&#xff0c;点击在word中插入签名&#xff0c;可插入背景透明的签字图 素材库-保存签名 将写好的签字图复制粘贴到素材库中&#xff0c;以便永久使用&#xff…...

Edge扩展插件安装位置

根据所获取的信息&#xff0c;Microsoft Edge的扩展插件安装位置和配置方式可以通过不同的方法管理。以下是一个大纲&#xff0c;概述了如何配置和管理Edge扩展插件&#xff1a; Edge扩展插件安装和管理大纲 了解扩展插件的安装模式 安装模式的选项&#xff1a;了解allowed、…...

Git将本地项目上传到Gitee仓库

1.右键点击文件&#xff0c;点击Git Bash Here,进入git窗口 2.初始化本地仓库 git init3.将本地仓库与远程仓库建立连接 git remote add origin 远程仓库地址远程仓库地址在gitee仓库复制即可 4.将远程仓库的文件拉到本地仓库中 git pull origin master5.将本地文件全部上传…...

linux环境安装docker

一、Docker是什么? 当我们开发一个应用程序时&#xff0c;通常需要配置和安装各种软件、库和依赖项。而这些环境配置可能会因为不同的操作系统或版本而存在差异&#xff0c;导致应用在不同环境中运行出现问题。 Docker就像是一个集装箱&#xff0c;可以将应用程序及其所有依…...

机器人技能学习-robosuite-0-入门介绍

文章目录 前言模块介绍实战案例1&#xff1a;从 demo 中创建自己的 env案例2&#xff1a;更换属于自己的物体 前言 资料太少、资料太少、资料太少&#xff0c;重要的事说三边&#xff0c;想根据自己实际场景自定义下机器人&#xff0c;结果发现无路可走&#xff0c;鉴于缺少参…...

【工具】tmux简单用法

tmux 是一个终端复用工具&#xff0c;允许你在单个终端窗口中运行多个终端会话&#xff0c;并在它们之间切换。它提供了分割窗格、多窗口和会话管理等功能&#xff0c;使得在终端中更加高效地工作。 以下是一些 tmux 的基本概念和简单应用&#xff1a; 会话 (Session): 一个 t…...

使用 C++/WinRT 的错误处理

本主题讨论了处理使用 C/WinRT 编程时出现的错误的策略。 更多常规信息和背景&#xff0c;请参阅错误和异常处理 (Modern C)。 避免捕获和抛出异常 建议继续编写异常安全代码&#xff0c;但最好尽量避免捕获和抛出异常。 如果没有异常处理程序&#xff0c;Windows 将自动生成错…...

计算机基础专升本笔记九-Windows7基础(一)Windows 7 介绍

计算机基础专升本笔记九-Windows7基础 一、Windows简介 Microsoft公司从1983年开始研制Windows系统&#xff0c;最初的研制目标是在MS-DOS的基础上提供一个多任务的图形用户界面。   1985年&#xff0c;第一个版本的Windows 1.0问世&#xff0c;它是一个具有图形用户界面的系…...

LeetCode1109. Corporate Flight Bookings

文章目录 一、题目二、题解 一、题目 There are n flights that are labeled from 1 to n. You are given an array of flight bookings bookings, where bookings[i] [firsti, lasti, seatsi] represents a booking for flights firsti through lasti (inclusive) with sea…...

视觉SLAM十四讲|【五】相机与IMU时间戳同步

视觉SLAM十四讲|【五】相机与IMU时间戳同步 相机成像方程 Z [ u v 1 ] [ f x 0 c x 0 f y c y 0 0 1 ] [ X Y Z ] K P Z \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} \…...

js null和undefined的区别

null和undefined在JavaScript中都表示“无”的概念&#xff0c;但它们在使用和含义上有一些重要的区别。 含义&#xff1a; null 是一个表示“无”的对象&#xff0c;当转换为数值时结果为0。 undefined 是一个表示“缺少值”的原始值&#xff0c;当转换为数值时结果为NaN。…...

Arduino| IDE下载、安装和设置以及开发板的连接

IDE下载、安装和设置以及开发板的连接 IDE下载IDE安装IDE设置首选项——设置语言、字体、主题、地址等等开发板管理器——添加开发板 开发板的连接 IDE下载 第一步&#xff1a;进入Arduino官网https://www.arduino.cc。 第二步&#xff1a;选择导航栏的Software&#xff0c;然…...

Linux之Ubuntu环境Jenkins部署前端项目

今天分享Ubuntu环境Jenkins部署前端vue项目 一、插件安装 1、前端项目依赖nodejs&#xff0c;需要安装相关插件 点击插件管理&#xff0c;输入node模糊查询 选择NodeJS安装 安装成功 2、配置nodejs 点击后进入 点击新增 NodeJS 配置脚手架类型&#xff1a;如果不填 默认npm …...

QT下的几种实现modbus的库,记录

QModbus QT提供了一个名为QModbus的模块,可以实现Modbus的主机或从机功能 pro需要添加 QT += serialbus serialport相关头文件 #include <QModbusTcpClient> #include <QModbusDataUnit> 具体使用参考: https://blog.csdn.net/XCJandLL/article/details/1…...

复杂网络演化博弈代码:从nw小世界网络到互动创新社区知识共享研究

复杂网络演化博弈代码 nw小世界网络 复现文章 基于网络演化博弈的互动创新社区用户 知识共享行为影响因素研究 An evolutionary analysis on the effect of government policies on electric vehicle diffusion in complex network ()最近在研究一些关于复杂网络演化博弈的有趣…...

HY-Motion 1.0在元宇宙中的应用:虚拟世界角色动画生成

HY-Motion 1.0在元宇宙中的应用&#xff1a;虚拟世界角色动画生成 1. 元宇宙里&#xff0c;角色为什么需要“活”起来 打开一个元宇宙应用&#xff0c;你看到的可能是一个精致的虚拟空间&#xff0c;但真正让人愿意停留的&#xff0c;从来不是静态的场景&#xff0c;而是能动…...

OpenClaw调试技巧:GLM-4.7-Flash任务执行日志分析与问题定位

OpenClaw调试技巧&#xff1a;GLM-4.7-Flash任务执行日志分析与问题定位 1. 为什么需要关注OpenClaw的调试日志 上周我在尝试用OpenClaw自动整理项目文档时&#xff0c;遇到了一个奇怪的现象&#xff1a;任务明明显示执行成功&#xff0c;但最终生成的Markdown文件却缺失了关…...

手把手教你理解永磁同步电机的Clark与Park变换(附MATLAB仿真代码)

手把手教你理解永磁同步电机的Clark与Park变换&#xff08;附MATLAB仿真代码&#xff09; 在工业自动化与电动汽车驱动领域&#xff0c;永磁同步电机&#xff08;PMSM&#xff09;凭借其高功率密度和卓越的动态性能&#xff0c;已成为现代运动控制系统的核心部件。然而&#xf…...

s2-pro效果展示:高保真语音生成——呼吸感、重音、语速变化细节还原

s2-pro效果展示&#xff1a;高保真语音生成——呼吸感、重音、语速变化细节还原 1. 专业级语音合成新标杆 s2-pro作为Fish Audio开源的专业级语音合成模型镜像&#xff0c;正在重新定义文本转语音的技术标准。不同于市面上常见的机械式语音合成&#xff0c;这款工具能够精准还…...

无需复杂配置:Ollama一键运行EmbeddingGemma-300m嵌入模型教程

无需复杂配置&#xff1a;Ollama一键运行EmbeddingGemma-300m嵌入模型教程 1. 为什么选择EmbeddingGemma-300m 在当今AI应用蓬勃发展的时代&#xff0c;文本嵌入技术已成为构建智能系统的核心组件。然而&#xff0c;大多数嵌入模型要么体积庞大难以部署&#xff0c;要么性能不…...

智能邮件管家:OpenClaw+GLM-4.7-Flash自动化邮件处理系统

智能邮件管家&#xff1a;OpenClawGLM-4.7-Flash自动化邮件处理系统 1. 为什么需要自动化邮件处理 作为每天需要处理上百封邮件的商务人士&#xff0c;我发现自己陷入了"邮件黑洞"——早上打开邮箱就像打开潘多拉魔盒&#xff0c;重要客户询盘、会议邀请、账单通知…...

OpenClaw问题诊断:Qwen3.5-4B-Claude模型执行失败常见原因分析

OpenClaw问题诊断&#xff1a;Qwen3.5-4B-Claude模型执行失败常见原因分析 1. 问题背景与诊断思路 上周在尝试用OpenClaw自动化处理技术文档时&#xff0c;遇到了模型执行中断的问题。当时任务卡在"分析Markdown文档结构"环节&#xff0c;控制台只留下一行模糊的错…...

基于springboot岳麓山景区预约系统设计与开发(源码+精品论文+答辩PPT等资料)

博主介绍&#xff1a;CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交…...

26地学考研复试线汇总(华东师范大学/南京师范大学/南京信息工程大学/中国海洋大学/兰州大学)

今天开始更新一波26地理学考研复试分数线&#xff0c;计划考研的同学可以关注&#x1f447;华东师范大学华东师范大学26复试线公布&#xff01;地理学统一划线&#xff01; 地理科学学院&#xff1a;地理学统一划线325分&#xff0c;相比去年总体上涨&#xff1b;测绘工程333分…...