Qt提供QListWidget类列表框控件用来加载并显示多个列表项。QListWidgetItem类就是列表项类。一般列表框控件中的列表项有两种加载方式:
一种是由用户手动添加的列表项,比如音乐播放器中加载音乐文件的文件列表,每一个音乐文件都是一个列表项。
对于这种列表项,用户可以进行增加、删除、单击以及双击等操作。
一种是由程序员事先编写好,写在程序中供用户选择的列表项,比如餐厅的电子菜单,每一道菜对应一个列表项。
对于这种列表项,用户可以进行单机和双击操作(增加和删除操作也是可以进行的,但是一般的点菜系统会屏蔽掉这种功能)。
QListWidget类列表框控件支持两种列表项显示方式,即QListView::IconMode和QListView::ListMode。
总结一下列表框常用的增加、删除、单击、双击操作以及列表项显示方式设置,先给出全部代码,再解释。
一、设计器基础属性设置
- void setSelectionMode(QAbstractItemView::SelectionMode mode); 设置单选多选模式
参数 | 含义 |
---|---|
NoSelection | 不能选择 |
SingleSelection | 单选 |
MultiSelection | 多选 |
ExtendedSelection | 多选,Ctrl / Shift+ 鼠标左键,可以选中多行,但是不是连续选中 |
ContiguousSelection | 连续的选择,Ctrl / Shift+ 鼠标左键,可以一次性选择多行 |
- void setFlow(Flow flow); 设置排序模式
参数 | 含义 |
---|---|
LeftToRight | 从左到右 |
TopToBottom | 从上到下 |
-
通过设计器为每一项添加图标
-
void setIconSize(const QSize &size); 设置图标尺寸
-
QSize iconSize() const; 返回图标尺寸
-
void setGridSize(const QSize &size); 设置每一行的的宽高
-
QSize gridSize() const; 返回每一行的宽高
二、常用方法
1. 添加项
inline void addItem(const QString &label) //添加一项 一个QString
inline void addItem(QListWidgetItem *item); //添加一项 添加一个item
inline void addItems(const QStringList &labels) //一次添加多项
2. 插入项
void insertItem(int row, QListWidgetItem *item);
void insertItem(int row, const QString &label);
void insertItems(int row, const QStringList &labels);
3. 遍历项
for (int i = 0; i < ui.listWidget->count(); ++i)
{
qDebug() << ui.listWidget->item(i)->text();
}
4. 删除项
方法一:
void removeItemWidget(QListWidgetItem *item);
方法二:
QListWidgetItem *deletedItem=this->ui->listWidget->takeItem(i);
delete deletedItem; //记得要释放内存
5. 设置每一项可编辑
ui.listWidget->setEditTriggers(QAbstractItemView::AllEditTriggers);
for (int i = 0; i < ui.listWidget->count(); ++i)
{
ui.listWidget->item(i)->setFlags(Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsEnabled);
}
6. 排序
void sortItems(Qt::SortOrder order = Qt::AscendingOrder); //默认升序排序
三、信号事件
信号 | 说明 |
---|---|
void itemPressed(QListWidgetItem *item) | 鼠标左键或右键按下( |
void itemClicked(QListWidgetItem *item) | 鼠标左键点击(鼠标左键松开) |
void itemDoubleClicked(QListWidgetItem *item) | 鼠标左键或右键双击会触发 |
void itemActivated(QListWidgetItem *item) | 激活 双击 |
void itemEntered(QListWidgetItem *item) | 鼠标移上去 要打开鼠标跟踪事件(setMouseTracking(true)) |
void itemChanged(QListWidgetItem *item) | 列表内容改变,焦点移开,回车确认(手动和代码) |
void currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous) | 鼠标键盘选中(当前选择发生改变) 代码 |
void currentTextChanged(const QString ¤tText); | 鼠标键盘选中(当前选择发生改变) 代码 |
void currentRowChanged(int currentRow); | 鼠标键盘选中(当前选择发生改变) 代码 |
void itemSelectionChanged(); | 当选择发生改变的时候触发 |
四、显示其他控件
可以显示Qt原生控件,也可以自定义控件,进行添加显示。
//显示QLineEdit控件
QLineEdit *lineEdit = new QLineEdit(QString::fromLocal8Bit("显示控件001"));
ui.listWidget->setItemWidget(ui.listWidget->item(2), lineEdit);