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

相关推荐
Yaru112 小时前
伪3D地图和3D饼图实现
前端·3d·echarts
Getgit2 小时前
在 VS Code 中配置 PHP 开发环境完整指南
开发语言·vscode·php·intellij-idea·database
无风听海2 小时前
C# 中的 LinkedList
开发语言·c#
测试_AI_一辰2 小时前
Agent & RAG 测试工程 02:RAG 从最小闭环到可信
开发语言·前端·人工智能·github·ai编程
浔川python社2 小时前
《C++ 小程序编写系列》(第七部):C++11 + 新特性实战 —— 性能与稳定性双提升
java·c++·小程序
tudficdew2 小时前
C++中的策略模式实战
开发语言·c++·算法
heart_fly_in_sky2 小时前
RK3576平台OpenCL环境搭建完全指南(Lesson 1)
c++
naruto_lnq2 小时前
实时语音处理库
开发语言·c++·算法
_xaboy2 小时前
开源Vue组件-动态表单组件设计,告别重复CRUD,JSON一键生成表单
前端·vue.js·低代码·开源·json