QListWidget类提供了一个基于项的列表小部件,QListWidgetItem是列表中的项,该篇文章中涉及到的功能有添加列表项,插入列表项,删除列表项,清空列表,向上移动列表项,向下移动列表项。
QListWidget是一个便利类,它提供了一个类似于QListView提供的列表视图,但具有用于添加和删除项的经典基于项的接口。QListWidget使用一个内部模型管理列表中的每个QListWidgetItem。
对于更灵活的列表视图小部件,可以使用标准模型的QListView类
常用API
常用信号
void currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous):每当当前元素发生变化时,就会发出这个信号;
void currentRowChanged(int currentRow):每当当前元素发生变化时,就会发出这个信号;
void currentTextChanged(const QString ¤tText):每当当前元素发生变化时,就会发出这个信号;
void itemActivated(QListWidgetItem *item):当项目被激活时,这个信号就会发出。根据系统配置,当用户单击或双击该项目时,该项目将被激活;
void itemChanged(QListWidgetItem *item):每当item的数据发生变化时,就会发出这个信号;
void itemClicked(QListWidgetItem *item):当鼠标按钮单击部件中的某个项目时,该信号由指定的项目发出;
void itemDoubleClicked(QListWidgetItem *item):当鼠标按钮双击部件中的某个项目时,该信号由指定的项目发出;
void itemEntered(QListWidgetItem *item):当鼠标光标进入某个元素时,就会发出这个信号。项目就是输入的项目。这个信号只有在mouseTracking被打开,或者鼠标移动到某个元素时按下了鼠标按钮时才会发出;
void itemPressed(QListWidgetItem *item):当在部件中的某个项目上按下鼠标按钮时,该信号由指定的项目发出;
void itemSelectionChanged():每当选择发生变化时,就会发出这个信号;
槽函数
void scrollToItem(const QListWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible):如果需要,滚动视图以确保项目可见;
clear():清空列表;
QListWidgetItem
QListWidgetItem表示QListWidget中的单个项目。每个物品都可以包含若干信息,并将适当地显示它们。
item view便利类使用经典的基于item的接口,而不是纯粹的model/view方法。要获得更灵活的列表视图小部件,请考虑使用标准模型的QListView类。
QListWidgetItem常用函数
图片示例

代码示例
QlistWidgetDialog.h
#ifndef QLISTWIDGETDIALOG_H
#define QLISTWIDGETDIALOG_H
#include
#include
namespace Ui
{
class QlistWidgetDialog;
}
class QlistWidgetDialog : public QDialog
{
Q_OBJECT
public:
explicit QlistWidgetDialog(QWidget* parent = nullptr);
~QlistWidgetDialog();
private slots:
void on_pushButtonAdd_clicked();
void on_pushButtonUp_clicked();
void on_pushButtonDown_clicked();
void on_pushButtonRemove_clicked();
void on_pushButtonClear_clicked();
void on_pushButtonInsert_clicked();
void on_listWidget_currentRowChanged(int currentRow);
void on_listWidget_currentItemChanged(QListWidgetItem* current, QListWidgetItem* previous);
void on_listWidget_currentTextChanged(const QString& currentText);
void on_listWidget_customContextMenuRequested(const QPoint& pos);
private:
Ui::QlistWidgetDialog* ui;
};
#endif // QLISTWIDGETDIALOG_H
QlistWidgetDialog.cpp
#include "QlistWidgetDialog.h"
#include "ui_QlistWidgetDialog.h"
#include >
#include
#include
QlistWidgetDialog::QlistWidgetDialog(QWidget* parent)
: QDialog(parent)
, ui(new Ui::QlistWidgetDialog)
{
ui->setupUi(this);
//listWidget属性设置为自定义菜单 才可以鼠标右键自定义右键菜单
ui->listWidget->setContextMenuPolicy(Qt::CustomContextMenu);
}
QlistWidgetDialog::~QlistWidgetDialog()
{
delete ui;
}
void QlistWidgetDialog::on_pushButtonAdd_clicked()
{
QString text = ui->lineEdit->text();
QListWidgetItem* item = new QListWidgetItem(text);
// 可编辑
item->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled);
ui->listWidget->addItem(item);
}
void QlistWidgetDialog::on_pushButtonUp_clicked()
{
QListWidgetItem* selectItem = ui->listWidget->currentItem();
int curRow = ui->listWidget->row(selectItem);
if(curRow > 0) {
ui->listWidget->takeItem(curRow);
ui->listWidget->insertItem(curRow - 1, selectItem);
ui->listWidget->setCurrentItem(selectItem);
}
}
void QlistWidgetDialog::on_pushButtonDown_clicked()
{
QListWidgetItem* selectItem = ui->listWidget->currentItem();
int curRow = ui->listWidget->row(selectItem);
if(curRow < ui->listWidget->count() - 1) {
//移除当前行号的item
ui->listWidget->takeItem(curRow);
//在curRow+1位置插入选中的item
ui->listWidget->insertItem(curRow + 1, selectItem);
//设置选中的item为当前item
ui->listWidget->setCurrentItem(selectItem);
}
}
void QlistWidgetDialog::on_pushButtonRemove_clicked()
{
int row = ui->listWidget->currentRow();
//移除项
QListWidgetItem* dItem = ui->listWidget->takeItem(row);
//删除对象
delete dItem;
}
void QlistWidgetDialog::on_pushButtonClear_clicked()
{
ui->listWidget->clear();
}
void QlistWidgetDialog::on_pushButtonInsert_clicked()
{
QString text = ui->lineEdit->text();
int curRow = ui->listWidget->currentRow();
QListWidgetItem* newItem = new QListWidgetItem(text);
ui->listWidget->insertItem(curRow, newItem);
}
void QlistWidgetDialog::on_listWidget_currentRowChanged(int currentRow)
{
qDebug()<<"currentRow"<<currentRow;
}
void QlistWidgetDialog::on_listWidget_currentItemChanged(QListWidgetItem* current, QListWidgetItem* previous)
{
// QString curText = current->text();
// QString preText = previous->text();
// qDebug()<<"curText"<
}
void QlistWidgetDialog::on_listWidget_currentTextChanged(const QString& currentText)
{
qDebug()<<"currentText"<<currentText;
}
//鼠标右键
void QlistWidgetDialog::on_listWidget_customContextMenuRequested(const QPoint& pos)
{
Q_UNUSED(pos);
QMenu* menu = new QMenu(this);
QAction* act1 = new QAction("act1");
QAction* act2 = new QAction("act2");
QAction* act3 = new QAction("act3");
QAction* act4 = new QAction("act4");
menu->addAction(act1);
menu->addAction(act2);
menu->addAction(act3);
menu->addAction(act4);
menu->exec(QCursor::pos());//在鼠标光标位置显示右键快捷菜单
delete menu;
}