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

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

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

相关文章

观测云产品更新 | 日志、场景仪表板、监控器等

观测云更新 用户访问监测 &#xff08;RUM &#xff09; 公网 Dataway 支持 ip 转换成地理位置信息。 日志 > 查看器详情页 1、新增 BPF 网络日志采集及日志详情页&#xff0c;支持 Json 格式转化&#xff1b; 2、上述 1 中的日志详情页中新增可读的展示模式&#xff0c…

突然又对 Go 感兴趣,GOPATH entry cannot start with shell metacharacter 错误

打发无聊时间&#xff0c;水文一篇&#xff5e; 事情是这样的&#xff0c;因为我们上架的渠道包基本是定制化混淆出包&#xff0c; 混淆出包有一个关键点就是指定映射文件&#xff0c;映射文件的内容有一部分是使用外部工具在打包前按照一定规律随机生成包名、类名&#xff0c…

OpenAI推出GPT商店,以充分利用ChatGPT在消费者市场上的成功

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

前端项目优化:减少webpack打包体积

前言 最近自己买个云服务器,把之前搭建的webpack-vue项目进行了部署,现在项目已经成功了。 项目地址:GitHub - wjt162286793/webpack----vue: 使用webpack配置一个脚手架,对照文档,纯手打 线上地址:IAM架构资产管理系统 不过是没有经过任何优化的,虽然项目体积和业务不是很复…

【自控实验】4. 数字仿真实验

本科课程实验报告&#xff0c;有太多公式和图片了&#xff0c;干脆直接转成图片了 仅分享和记录&#xff0c;不保证全对 使用matlab中的simulink进行仿真 实验内容 线性连续控制系统的数字仿真 根据开环传递函数G(S)的不同&#xff0c;完成两个线性连续控制系统的仿真。 …

io.lettuce.core.RedisCommandExecutionException: NOAUTH Authentication required.

报错信息&#xff1a; 浏览器中的报错信息 IDEA中的报错信息 报错原因&#xff1a; SpringBoot整合Redis使用的默认配置&#xff0c;但是我们设置了Redis的密码&#xff0c;而默认配置中密码是为空的&#xff0c;导致不能够连接 浏览器中的报错信息 There was an unexpected …

AI赋能建筑设计 | VERYCLOUD睿鸿股份与亚马逊云科技协力为AIRI lab. 打造生成式AI应用案例

近年来&#xff0c;很多研究都致力于探索如何让建筑师借助人工智能的力量来促进并简化设计流程。生成式AI全球爆火以来&#xff0c;建筑设计领域也掀起了一场全新的思维变革。 AI为建筑设计带来更多可能 作为一家面向全球提供设计服务的企业&#xff0c;AIRI lab.计划推出一种…

【linux驱动开发】在linux内核中注册一个杂项设备与字符设备以及内核传参的详细教程

文章目录 注册杂项设备驱动模块传参注册字符设备 开发环境&#xff1a; windows ubuntu18.04 讯为rk3568开发板 注册杂项设备 相较于字符设备&#xff0c;杂项设备有以下两个优点: 节省主设备号:杂项设备的主设备号固定为 10&#xff0c;在系统中注册多个 misc 设备驱动时&…

Flink 2.0 状态管理存算分离架构演进

Flink 2.0 状态管理存算分离架构演进 flink 现有状态访问线程模型首先简单来说一下,flink2.0做存算分离,最最主要的一点是解决,大状态的问题,例如一个超过50T的物流数据,大状态恢复可能就要1天,所以才有存算分离这么一个设计初衷。 下面先来看一下 任务是怎么执行提交的,…

Python电能质量扰动信号分类(五)基于CNN-Transformer的一维信号分类模型

目录 往期精彩内容&#xff1a; 引言 1 数据集制作与加载 1.1 导入数据 1.2 制作数据集 2 CNN-Transformer分类模型和超参数选取 2.1定义CNN-Transformer分类模型 2.2 设置参数&#xff0c;训练模型 3 模型评估 3.1 准确率、精确率、召回率、F1 Score 3.2 十分类混淆…

asp.net core项目发布到 iis上

我们都知道与传统asp.net 项目比较&#xff0c;ASP.NET Core则完全不同&#xff0c;它并不是运行在IIS的工作进程中&#xff0c;而是独立运行的。它运行于控制台应用程序之中&#xff0c;控制台中则运行了Kestrel Web服务器组件。Kestrel作为一款.NET Web服务器的实现&#xff…

智邦国际ERP系统 SQL注入漏洞

产品介绍 智邦国际ERP系统是一款功能丰富、灵活可定制的企业管理软件&#xff0c;能够帮助企业实现资源优化、流程优化和业务增长&#xff0c;具有高度的灵活性和可定制性&#xff0c;可以根据不同企业的需求进行个性化配置和拓展。 漏洞描述 智邦国际ERP系统 GetPersonalSe…