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






