显示模式
有两种显示模式,列表模式和图标模式
// 获取和设置显示模式
QListView::ViewMode viewMode() const
void setViewMode(QListView::ViewMode mode)
QListView::ViewMode有两个取值
QListView::ListMode
列表模式
QListView::IconMode
图标模式
交替背景色
设置相邻行交替显示不同的背景色,便于显示和浏览时定位
// 获取和设置交替显示(win11该接口失效)
bool alternatingRowColors() const
void setAlternatingRowColors(bool enable)
添加条目
// 在尾部添加
void addItem(const QString &label)
void addItem(QListWidgetItem *item)
void addItems(const QStringList &labels)
// 在指定行之前添加
void insertItem(int row, QListWidgetItem *item)
void insertItem(int row, const QString &label)
void insertItems(int row, const QStringList &labels)
使用QListWidgetItem为参数的函数,可以为条目指定图标
QListWidgetItem::QListWidgetItem(const QIcon &icon,
const QString &text,
QListWidget *parent = nullptr,
int type = Type)
删除条目
列表中的条目可以删除,以删除当前行为例
// 方法一
QListWidgetItem* item = ui->lwProvince->currentItem();
ui->lwProvince->removeItemWidget(item);
delete item;
// 方法二
int row = ui->lwProvince->currentRow();
QListWidgetItem* item = ui->lwProvince->takeItem(row);
delete item;
都需要手动delete掉item;
常用信号
// 当条目被单击时,发射该信号
void itemClicked(QListWidgetItem *item);
// 当条目被双击时,发射该信号
void itemDoubleClicked(QListWidgetItem *item);
举例
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QPushButton>
#include<QListWidget>
#include<QVBoxLayout>
#include<QHBoxLayout>
#include<QMessageBox>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr): QWidget(parent)
{
resize(200,200);
QVBoxLayout* v_box=new QVBoxLayout(this);
v_box->setSpacing(20);
//创建列表
list=new QListWidget(this);
//添加一条初始条目
QListWidgetItem* item1=new QListWidgetItem(QIcon(":/11.png"),"湖北");
list->addItem(item1);
v_box->addWidget(list);
QHBoxLayout* h_box=new QHBoxLayout();
h_box->setSpacing(20);
//创建按钮
add=new QPushButton("添加一行",this);
del=new QPushButton("删除选中行",this);
change_mod=new QPushButton("改变显示模式",this);
h_box->addWidget(add);
h_box->addWidget(del);
h_box->addWidget(change_mod);
v_box->addLayout(h_box);
//绑定槽函数
//添加
connect(add,&QPushButton::clicked,this,[=](){
//直接在尾部添加
QListWidgetItem* item1=new QListWidgetItem(QIcon(":/11.png"),"浙江");
list->addItem(item1);
});
//删除
connect(del,&QPushButton::clicked,this,[=](){
//删除当前选中的行
QListWidgetItem* item=list->currentItem();
list->removeItemWidget(item);
delete item;//记手动delete
// //如何遍历list里面控件的条目
// for(int i=0;i<list->count();++i)
// {
// 获取条目的个数,然后根据索引获取条目
// auto item=list->takeItem(i);
// }
});
//改变显示模式
connect(change_mod,&QPushButton::clicked,this,[=](){
//设为列表或者图标模式
if(list->viewMode()==QListWidget::ListMode)
{
list->setViewMode(QListWidget::IconMode);
}
else if(list->viewMode()==QListWidget::IconMode)
{
list->setViewMode(QListWidget::ListMode);
}
});
//绑定QListWidget控件的信号
connect(list,&QListWidget::itemClicked,this,[=](){
//将选中条目的文本提示下
auto item=list->currentItem();//该接口获取当前选条目
QMessageBox::information(this,"",QStringLiteral("当前选中:")+item->text());
});
}
~Widget()=default;
private:
QPushButton* add;
QPushButton* del;
QPushButton* change_mod;
QListWidget* list;
};
#endif // WIDGET_H
学习链接:https://github.com/0voice