QListWidget Class

QListWidget 类提供了一个基于项目的列表 widget。更多

Header: #include <QListWidget>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
继承: QListView

属性

公共函数

QListWidget(QWidget *parent = nullptr)
virtual ~QListWidget()
void addItem(QListWidgetItem *item)
void addItem(const QString &label)
void addItems(const QStringList &labels)
void closePersistentEditor(QListWidgetItem *item)
int count() const
QListWidgetItem *currentItem() const
int currentRow() const
void editItem(QListWidgetItem *item)
QList<QListWidgetItem *> findItems(const QString &text, Qt::MatchFlags flags) const
QModelIndex indexFromItem(const QListWidgetItem *item) const
void insertItem(int row, QListWidgetItem *item)
void insertItem(int row, const QString &label)
void insertItems(int row, const QStringList &labels)
bool isPersistentEditorOpen(QListWidgetItem *item) const
bool isSortingEnabled() const
QListWidgetItem *item(int row) const
QListWidgetItem *itemAt(const QPoint &p) const
QListWidgetItem *itemAt(int x, int y) const
QListWidgetItem *itemFromIndex(const QModelIndex &index) const
QWidget *itemWidget(QListWidgetItem *item) const
QList<QListWidgetItem *> items(const QMimeData *data) const
void openPersistentEditor(QListWidgetItem *item)
void removeItemWidget(QListWidgetItem *item)
int row(const QListWidgetItem *item) const
QList<QListWidgetItem *> selectedItems() const
void setCurrentItem(QListWidgetItem *item)
void setCurrentItem(QListWidgetItem *item, QItemSelectionModel::SelectionFlags command)
void setCurrentRow(int row, QItemSelectionModel::SelectionFlags command)
void setCurrentRow(int row)
void setItemWidget(QListWidgetItem *item, QWidget *widget)
void setSortingEnabled(bool enable)
void sortItems(Qt::SortOrder order = Qt::AscendingOrder)
QListWidgetItem *takeItem(int row)
QRect visualItemRect(const QListWidgetItem *item) const

重新实现的公共函数

virtual void setSelectionModel(QItemSelectionModel *selectionModel) override

公共插槽

void clear()
void scrollToItem(const QListWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible)

信号

void currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
void currentRowChanged(int currentRow)
void currentTextChanged(const QString &currentText)
void itemActivated(QListWidgetItem *item)
void itemChanged(QListWidgetItem *item)
void itemClicked(QListWidgetItem *item)
void itemDoubleClicked(QListWidgetItem *item)
void itemEntered(QListWidgetItem *item)
void itemPressed(QListWidgetItem *item)
void itemSelectionChanged()

受保护函数

virtual bool dropMimeData(int index, const QMimeData *data, Qt::DropAction action)
virtual QMimeData *mimeData(const QList<QListWidgetItem *> &items) const
virtual QStringList mimeTypes() const
virtual Qt::DropActions supportedDropActions() const

重新实现的受保护函数

virtual void dropEvent(QDropEvent *event) override
virtual bool event(QEvent *e) override

详细描述

QListWidget 是一个方便的类,它提供了一个与QListView 所提供的列表视图类似的列表视图,但具有一个经典的基于项的界面,用于添加和删除项。QListWidget 使用内部模型来管理列表中的每个QListWidgetItem

如需更灵活的列表视图部件,请使用具有标准模型的QListView 类。

列表部件的构造方法与其他部件相同:

    QListWidget *listWidget = new QListWidget(this);

列表 widget 的selectionMode() 决定了可以同时选择列表中的多少个项目,以及是否可以创建复杂的项目选择。这可以通过setSelectionMode() 函数来设置。

有两种方法可以将项目添加到列表中:可以将列表 widget 作为父 widget 构建项目,也可以不使用父 widget 构建项目,然后再将其添加到列表中。如果在构建项目时列表 widget 已经存在,那么第一种方法更容易使用:

    new QListWidgetItem(tr("Oak"), listWidget);
    new QListWidgetItem(tr("Fir"), listWidget);
    new QListWidgetItem(tr("Pine"), listWidget);

如果需要在特定位置向列表中插入一个新项目,则应在没有父 widget 的情况下构建该项目。然后使用insertItem() 函数将其放入列表中。列表部件将拥有该项目的所有权。

    QListWidgetItem *newItem = new QListWidgetItem;
    newItem->setText(itemText);
    listWidget->insertItem(row, newItem);

对于多个项目,可以使用insertItems() 代替。使用count() 函数可以查出列表中的项目数。要从列表中删除项目,请使用takeItem() 函数。

可以使用currentItem() 查找列表中的当前项目,也可以使用setCurrentItem() 更改列表中的当前项目。用户还可以通过键盘导航或点击不同的项目来更改当前项目。当当前项目发生变化时,currentItemChanged() 信号将与新的当前项目和之前的当前项目一起发出。

另请参阅 QListWidgetItem,QListView,QTreeView,模型/视图编程标签对话框示例

属性文档

[read-only] count : const int

此属性保存列表中的项目数,包括任何隐藏项目。

访问功能:

int count() const

currentRow : int

该属性包含当前项目的行。

根据当前的选择模式,该行也可能被选中。

访问功能

int currentRow() const
void setCurrentRow(int row)
void setCurrentRow(int row, QItemSelectionModel::SelectionFlags command)

通知信号:

void currentRowChanged(int currentRow)

sortingEnabled : bool

此属性表示是否启用排序

如果该属性为true ,则启用列表排序;如果该属性为 false,则不启用排序。

默认值为 false。

访问函数:

bool isSortingEnabled() const
void setSortingEnabled(bool enable)

成员函数文档

[explicit] QListWidget::QListWidget(QWidget *parent = nullptr)

用给定的parent 构造一个空的 QListWidget。

[virtual noexcept] QListWidget::~QListWidget()

销毁列表 widget 及其所有项目。

void QListWidget::addItem(QListWidgetItem *item)

在列表 widget 的末尾插入item

警告: QListWidgetItem 只能添加到QListWidget 一次。多次向QListWidget 添加相同的QListWidgetItem 会导致未定义的行为。

另请参阅 insertItem()。

void QListWidget::addItem(const QString &label)

在列表 widget 的末尾插入文本为label 的项目。

void QListWidget::addItems(const QStringList &labels)

在列表 widget 的末尾插入带有labels 文本的项目。

另请参见 insertItems().

[slot] void QListWidget::clear()

删除视图中的所有项目和选项。

警告: 所有项目将被永久删除。

void QListWidget::closePersistentEditor(QListWidgetItem *item)

关闭给定item 的持久编辑器。

另请参阅 openPersistentEditor() 和isPersistentEditorOpen()。

QListWidgetItem *QListWidget::currentItem() const

返回当前项目。

另请参阅 setCurrentItem()。

[signal] void QListWidget::currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)

每当当前项目发生变化时,就会发出该信号。

previous 是之前拥有焦点的项目; 是新的当前项目。current

[signal] void QListWidget::currentRowChanged(int currentRow)

每当当前项目发生变化时,就会发出该信号。

currentRow 是当前项目的行。如果没有当前项目, 为-1。currentRow

注: 属性currentRow 的通知信号。

[signal] void QListWidget::currentTextChanged(const QString &currentText)

每当当前项目发生变化时,就会发出该信号。

currentText 是当前项目中的文本数据。如果没有当前项目,则 无效。currentText

[override virtual protected] void QListWidget::dropEvent(QDropEvent *event)

重实现:QListView::dropEvent(QDropEvent *event).

[virtual protected] bool QListWidget::dropMimeData(int index, const QMimeData *data, Qt::DropAction action)

处理由外部拖放操作提供的data ,该操作在给定的index 中以给定的action 结束。如果dataaction 可由模型处理,则返回true ;否则返回false

另请参阅 supportedDropActions() 。

void QListWidget::editItem(QListWidgetItem *item)

开始编辑item (如果可以编辑)。

[override virtual protected] bool QListWidget::event(QEvent *e)

重实现:QListView::event(QEvent *e)。

QList<QListWidgetItem *> QListWidget::findItems(const QString &text, Qt::MatchFlags flags) const

使用给定的flags 查找文本与字符串text 匹配的条目。

QModelIndex QListWidget::indexFromItem(const QListWidgetItem *item) const

返回与给定item 相关的QModelIndex

注: 在 5.10 之前的 Qt 版本中,该函数使用非const item

void QListWidget::insertItem(int row, QListWidgetItem *item)

row 给定的列表位置插入item

另请参阅 addItem() 。

void QListWidget::insertItem(int row, const QString &label)

在列表 widget 中row 给定的位置插入文本为label 的项目。

另请参阅 addItem() 。

void QListWidget::insertItems(int row, const QStringList &labels)

labels 的列表中插入项目,从给定的row 开始。

另请参阅 insertItem() 和addItem()。

bool QListWidget::isPersistentEditorOpen(QListWidgetItem *item) const

返回项目item 的持久编辑器是否打开。

另请参阅 openPersistentEditor() 和closePersistentEditor()。

QListWidgetItem *QListWidget::item(int row) const

如果已设置row ,则返回列表中占据给定 的项目;否则返回nullptr

另请参见 row()。

[signal] void QListWidget::itemActivated(QListWidgetItem *item)

该信号在item 被激活时发出。根据系统配置,当用户点击或双击item 时,它将被激活。当用户按下激活键(在 Windows 和 X11 上是Return 键,在 Mac OS X 上是Command+O )时,它也会被激活。

QListWidgetItem *QListWidget::itemAt(const QPoint &p) const

返回指向位于p 坐标处的项目的指针。坐标是相对于 list widget 的viewport() 而定的。

QListWidgetItem *QListWidget::itemAt(int x, int y) const

这是一个重载函数。

返回指向坐标 (x,y) 处项目的指针。坐标是相对于 list widget 的viewport() 而定的。

[signal] void QListWidget::itemChanged(QListWidgetItem *item)

只要item 的数据发生变化,就会发出该信号。

[signal] void QListWidget::itemClicked(QListWidgetItem *item)

当鼠标按钮被点击到 widget 中的某个项目上时,该信号将以指定的item 发送。

另请参阅 itemPressed() 和itemDoubleClicked()。

[signal] void QListWidget::itemDoubleClicked(QListWidgetItem *item)

当鼠标按钮被双击到 widget 中的某个项目上时,该信号将以指定的item 发送。

另请参阅 itemClicked() 和itemPressed()。

[signal] void QListWidget::itemEntered(QListWidgetItem *item)

当鼠标光标进入一个项目时发出该信号。item 是进入的项目。该信号只有在打开 mouseTracking(鼠标跟踪)或在移动到一个项目时按下鼠标键时才会发出。

另请参阅 QWidget::setMouseTracking().

QListWidgetItem *QListWidget::itemFromIndex(const QModelIndex &index) const

返回与给定index 相关的QListWidgetItem 的指针。

[signal] void QListWidget::itemPressed(QListWidgetItem *item)

当鼠标按键被按在 widget 中的某个项目上时,该信号将以指定的item 发送。

另请参阅 itemClicked() 和itemDoubleClicked()。

[signal] void QListWidget::itemSelectionChanged()

每当选择发生变化时,就会发出该信号。

另请参阅 selectedItems()、QListWidgetItem::isSelected() 和currentItemChanged()。

QWidget *QListWidget::itemWidget(QListWidgetItem *item) const

返回在给定的item 中显示的 widget。

另请参阅 setItemWidget() 和removeItemWidget()。

QList<QListWidgetItem *> QListWidget::items(const QMimeData *data) const

返回data 对象中包含的项目的指针列表。如果该对象不是由QListWidget 在同一进程中创建的,则列表为空。

[virtual protected] QMimeData *QListWidget::mimeData(const QList<QListWidgetItem *> &items) const

返回一个包含指定items 的序列化描述的对象。用于描述项目的格式可从mimeTypes() 函数中获取。

如果项目列表为空,则返回nullptr ,而不是序列化的空列表。

[virtual protected] QStringList QListWidget::mimeTypes() const

返回可用于描述 listwidget 项目列表的 MIME 类型列表。

另请参见 mimeData()。

void QListWidget::openPersistentEditor(QListWidgetItem *item)

打开给定item 的编辑器。编辑后,编辑器将保持打开状态。

另请参阅 closePersistentEditor() 和isPersistentEditorOpen()。

void QListWidget::removeItemWidget(QListWidgetItem *item)

删除给定item 上的部件集。

要从列表中完全删除一个项目(行),可删除该项目或使用takeItem() 。

另请参阅 itemWidget() 和setItemWidget()。

int QListWidget::row(const QListWidgetItem *item) const

返回包含给定item 的行。

另请参见 item()。

[slot] void QListWidget::scrollToItem(const QListWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible)

必要时滚动视图以确保item 可见。

hint 指定操作后 的位置。item

QList<QListWidgetItem *> QListWidget::selectedItems() const

返回列表 widget 中所有选中项的列表。

void QListWidget::setCurrentItem(QListWidgetItem *item)

将当前项目设置为item

除非选择模式为NoSelection ,否则该项目也会被选中。

另请参阅 currentItem() 。

void QListWidget::setCurrentItem(QListWidgetItem *item, QItemSelectionModel::SelectionFlags command)

使用给定的command 将当前项目设置为item

void QListWidget::setCurrentRow(int row, QItemSelectionModel::SelectionFlags command)

使用给定的command ,将当前行设置为给定的row

注: 属性currentRow 的设置函数。

另请参阅 currentRow() 。

void QListWidget::setItemWidget(QListWidgetItem *item, QWidget *widget)

设置要在给定item 中显示的widget

该函数只能用于在列表 widget 项目中显示静态内容。如果要显示自定义动态内容或实现自定义编辑器部件,请使用QListView 和子类QStyledItemDelegate

注: 列表拥有widget 的所有权。

另请参阅 itemWidget(),removeItemWidget() 和委托类

[override virtual] void QListWidget::setSelectionModel(QItemSelectionModel *selectionModel)

重实现:QAbstractItemView::setSelectionModel(QItemSelectionModel *selectionModel).

void QListWidget::sortItems(Qt::SortOrder order = Qt::AscendingOrder)

根据指定的order 对列表 widget 中的所有项目排序。

[virtual protected] Qt::DropActions QListWidget::supportedDropActions() const

返回此视图支持的下拉操作。

另请参阅 Qt::DropActions

QListWidgetItem *QListWidget::takeItem(int row)

删除并返回列表 widget 中给定row 中的项目;否则返回nullptr

从列表 widget 中移除的项目不会由 Qt 管理,需要手动删除。

另请参阅 insertItem() 和addItem()。

QRect QListWidget::visualItemRect(const QListWidgetItem *item) const

返回位于item 的项目在视口中占据的矩形区域。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.