文章目录
- Qt多元素控件
- QListWidget核心属性、方法和信号
- 使用演示
Qt多元素控件
Qt中提供了一些多元素控件:
xxxView
和xxxWidget
的关系:
xxxView
是更底层的实现xxxWidget
是基于xxxView
封装而来的此处的
xxxView
是MVC结构的典型实现,MVC是软件架构中非常经典的组织形式:
M
:model 数据V
:view 视图C
:controller 控制器
xxxView
中负责了实现视图,不负责数据然后存储表示,也不负责数据和视图的交互,xxxWidget
就基于xxxView
将model
和controller
实现好了
QListWidget核心属性、方法和信号
QListWidget
能够显示一个纵向的列表
核心属性:
属性 | 说明 |
---|---|
currentRow | 当前被选中的行 |
count | 一共多少行 |
sortingEnabled | 是否允许排序 |
isWrapping | 是否允许换行 |
itemAlignment | 元素对齐方式 |
selectRectVisible | 被选中的元素矩形是否可见 |
spacing | 元素直接的间隔 |
核心方法:
方法 | 说明 |
---|---|
addItem(const QString& label) addItem(QListWidgetItem *item) | 列表中添加元素 |
currentItem() | 返回QListWidgetItem* 表示当前选中的元素 |
setCurrentItem(QListWidgetItem *item) | 设置选中哪个元素 |
setCurrentRow(int row) | 设置选中第几行的元素 |
insertItem(const QString& label, int row) insertItem(QListWidgetItem *item, int row) | 在指定的位置插入元素 |
item(int row) | 返回QListWidgetItem* 表示第row行的元素 |
takeItem(int row) | 删除指定行的元素,返回QListWidgetItem* 表示是哪个元素被删除了 |
列表当中的每一个元素,称为一个
item
,更具体的说,是通过QListWidgetItem
类表示的
核心信号:
信号 | 说明 |
---|---|
currentItemChanged(QListWidgetItem* current, QListWidgetItem* old) | 选中不同元素时会触发 参数是当前选中的元素和之前选中的元素 |
currentRowChanged(int) | 选中不同的元素时会触发 参数是当前选中元素的行数 |
itemChecked(QListWidgetItem* item) | 点击某个元素时触发 |
itemDoubleClicked(QListWidgetItem* item) | 双击某个元素时触发 |
itemEntered(QListWidgetItem* item) | 鼠标进入元素时触发 |
使用演示
页面属性设置:
代码添加元素:
ui->listWidget->addItem("C++");
ui->listWidget->addItem("Linux");
ui->listWidget->addItem(new QListWidgetItem("Data Structure"));
在
QListWidgetItem
中,不仅仅可以设置内容,还可以设置字体属性、图标、文字大小、是否能被选中等状态
图形化界面添加元素:
Tips:
如果初始化的内容是固定的,那么可以用代码也可以用图形化;
但如果初始化的内容是不固定的,要通过读取文件/网络来构造数据,此时就必须通过代码的方式添加
完整代码:
#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++");ui->listWidget->addItem("Linux");ui->listWidget->addItem(new QListWidgetItem("Data Structure"));}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_insert_clicked()
{//获取输入框中内容const QString &text = ui->lineEdit->text();//添加到listWidgetItem当中ui->listWidget->addItem(text);
}void Widget::on_pushButton_erase_clicked()
{//获取选中元素int row = ui->listWidget->currentRow();//未被选中返回-1if(row < 0){return;}//删除元素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();}qDebug() << "--------------";
}