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的安装包可以私信我,你们的支持是博主坚持创作的动力!💪💪

相关推荐
程序员黑豆5 小时前
鸿蒙应用开发:V1与V2版本数据持久化实战教程
前端·harmonyos
小月土星8 小时前
React Router 前端路由深度解析:从传统后端路由到现代 SPA 的完整演进
前端
程序员黑豆8 小时前
鸿蒙开发 Navigation 路由教程:从入门到实战
前端·harmonyos
weixin_440784119 小时前
【HandlerThread实现原理】
android·java·开发语言
天空'之城9 小时前
C 语言工业级通用组件手写 24:互补滤波
c语言·开发语言·互补滤波·嵌入式算法·工业级组件
XR1234567889 小时前
工厂车间无线网络方案对比:AGV漫游哪家强?
开发语言·php
傻啦嘿哟10 小时前
某短视频平台视频爬虫实战:抓取推荐流视频信息,绕过反爬的3种技巧
开发语言·爬虫·python
現実君11 小时前
【硬件进阶】AD22上位替换JLEDA教程
开发语言·php
mubei-12311 小时前
SpringDAO的用法
java·开发语言·数据库
用户9385156350711 小时前
从零理解 React Router v6:每一个 API 都是怎么工作的
前端·javascript·全栈