Qt多元素控件之QListWidget

Qt多元素控件之QListWidget

🌟🌟hello,各位读者大大们你们好呀🌟🌟

🚀🚀系列专栏:【Qt的学习】

📝📝本篇内容:多元素控件;QListWidget;使用QListWidget;实现通过按钮完成添加和删除元素功能

⬆⬆⬆⬆上一篇:Qt常用控件之QDateTimeEdit

💖💖作者简介:轩情吖,请多多指教(>> •̀֊•́ ) ̖́-

1.多元素控件

首先先来谈一谈多元素控件,基本上有QListWidget,QListView,QTableWidget,QTableView,QTreeWidget,QTreeView,它们分别是列表,表格,树形。并且我们可以发现每一种类型都有两个控件,那它们有什么区别呢?

简单来说xxxView是更底层的东西,而xxxWidget是封装了xxxView后而来的。xxxView是MVC中的的一种典型实现

"MVC(Model-View-Controller)模式是一种广泛应用于软件开发中的架构模式,特别是在用户界面的设计中。它将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller,数据和视图之间的业务流程),实现了关注点的分离,即将数据的管理、用户界面和控制逻辑分离开来。"

上面这段话是从百度上查阅的,在这里xxxView只负责了视图部分,它不负责模型和控制器,因此我们使用xxxView时需要自己实现这两个部分。但是xxxWidget不一样,它基于xxxView把模型和控制器都实现好了,我们只需要调用它们的API即可。简单来说我们xxxView更自由但是比较麻烦,而xxxWidget有限制但是方便

2.QListWidget

QListWidget控件是一个列表,我们可以对它进行添加条目,删除条目,插入条目的等等,我们可以通过看一下它的函数来了解它

函数声明 函数说明
void addItem(const QString& label) 添加元素
void addItem(QListWidgetItem *item) 添加元素,只不过是使用类对象
QListWidgetItem *currentItem() const 返回当前选中的元素
void setCurrentItem(QListWidgetItem* item) 设置当前选中元素
void setCurrentRow(int row) 设置选中第几行的元素
void insertItem(const QString& label, int row) 在row行插入元素
void insertItem(QListWidgetItem *item, int row) 在row行插入元素,只不过是使用类对象
QListWidgetItem *item(int row) const 返回QListWidgetItem* 表⽰第 row ⾏的元素
void takeItem(int row) 删除指定行的元素, 返回 QListWidgetItem* 表示是哪个元素被删除了

信号

信号声明 信号说明
void currentItemChanged(QListWidgetItemcurrent, QListWidgetItem old) 选中不同元素时会触发. 参数是当前选中的元素和之前选中的元素
void currentRowChanged(int) 选中不同元素时会触发. 参数是当前选中元素的⾏数
void itemClicked(QListWidgetItem* item) 点击某个元素时触发
void itemDoubleClicked(QListWidgetItem*item) 双击某个元素时触发
void itemEntered(QListWidgetItem* item) ⿏标悬停在元素时触发

3.使用QListWidget

在使用QListWidget时,我们会添加元素和删除元素,我们有两种方法

第一种是在图形化界面中,列表右键选择"编辑项目"就可以添加和删除元素

还有一种方法就是使用代码,具体的使用可以看下面的例子

4.实现通过按钮完成添加和删除元素功能

在图形化界面中,需要一个列表,两个按钮,以及一个单行输入框。单行输入框是获取添加元素的内容的

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //初始化,设置几个元素
    ui->listWidget->addItem("C++");

    //第二种设置方式
    QListWidgetItem* li=new QListWidgetItem("Java");//不用设置父元素,它的父元素是listWidget,会随着listWidget释放
    ui->listWidget->addItem(li);

    ui->listWidget->addItem("Python");
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_pushButton_add_clicked()
{
    //添加元素
    //获取输入框内容
    QString str(ui->lineEdit->text());
    //设置进列表
    ui->listWidget->addItem(str);
}

void Widget::on_pushButton_delete_clicked()
{
    //删除元素
    //获取当前选中的元素
    int row=ui->listWidget->currentRow();
    //删除选中的元素
    ui->listWidget->takeItem(row);
}

void Widget::on_listWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
{
    // 通过这个槽函数来感知到变化.
        if (current != nullptr) {
            qDebug() << "当前选中的元素: " << current->text();
        }
        if (previous != nullptr) {
            qDebug() << "上次选中的元素: " << previous->text();
        }
}

这里主要是运用了前面讲的几个函数,还是比较简单的,但是要注意一个问题,最后的一个槽函数是列表信号触发的,它的参数中的QListWidgetItem需要我们手动添加,"转到槽"的功能没有帮我们完成实现好。

并且我们可以来看看这个类,它主要还是用来表示一个元素,由文本+图标构成

这里手动加了头文件QListWidgetItem

🌸🌸Qt多元素控件之QListWidget大概就讲到这里啦,博主后续会继续更新更多Qt的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!如有小伙伴需要Qt的安装包可以私信我,你们的支持是博主坚持创作的动力!💪💪

相关推荐
BD_Marathon2 小时前
设计模式——依赖倒转原则
java·开发语言·设计模式
stevenson_aspdotnet2 小时前
QT5.15.12 编译备忘
qt
鹏北海2 小时前
micro-app 微前端项目部署指南
前端·nginx·微服务
发现一只大呆瓜2 小时前
虚拟列表:从定高到动态高度的 Vue 3 & React 满分实现
前端·vue.js·react.js
css趣多多3 小时前
add组件增删改的表单处理
java·服务器·前端
证榜样呀3 小时前
2026 大专计算机专业必考证书推荐什么
大数据·前端
devmoon3 小时前
在 Polkadot Runtime 中添加多个 Pallet 实例实战指南
java·开发语言·数据库·web3·区块链·波卡
蓝帆傲亦3 小时前
前端性能极速优化完全指南:从加载秒开体验到丝滑交互
前端·交互
Evand J3 小时前
TDOA(到达时间差)的GDOP和CRLB计算的MATLAB例程,论文复现,附参考文献。GDOP:几何精度因子&CRLB:克拉美罗下界
开发语言·matlab·tdoa·crlb·gdop
野犬寒鸦3 小时前
从零起步学习并发编程 || 第七章:ThreadLocal深层解析及常见问题解决方案
java·服务器·开发语言·jvm·后端·学习