QListWidget Class
QListWidget 类提供了一个基于项目的列表控件。更多内容...
| 头文件: | #include <QListWidget> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| 继承自: | QListView |
属性
- count : int
- currentRow : int
- sortingEnabled : bool
(since 6.10)supportedDragActions : Qt::DropActions
公共函数
| 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) |
| void | setCurrentRow(int row, QItemSelectionModel::SelectionFlags command) |
| void | setItemWidget(QListWidgetItem *item, QWidget *widget) |
| void | setSortingEnabled(bool enable) |
| void | setSupportedDragActions(Qt::DropActions actions) |
| void | sortItems(Qt::SortOrder order = Qt::AscendingOrder) |
| Qt::DropActions | supportedDragActions() const |
| 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 ¤tText) |
| 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 |
重新实现的受保护函数
详细说明

QListWidget 是一个便利类,它提供了一个与QListView 类似的列表视图,但采用经典的基于项的界面来添加和删除项。QListWidget 使用内部模型来管理列表中的每个QListWidgetItem 。
若需更灵活的列表视图控件,请配合标准模型使用QListView 类。
列表控件的创建方式与其他控件相同:
QListWidget *listWidget = new QListWidget(this);列表控件的selectionMode()方法决定了列表中可同时选中的项目数量,以及是否支持创建复杂的选择集。这可通过setSelectionMode()函数进行设置。
向列表中添加项目有两种方法:一种是以列表控件作为父控件来创建项目,另一种是先不指定父控件创建项目,随后再将其添加到列表中。如果在创建项目时列表控件已存在,则第一种方法更易于使用:
new QListWidgetItem(tr("Oak"), listWidget);
new QListWidgetItem(tr("Fir"), listWidget);
new QListWidgetItem(tr("Pine"), listWidget);若需将新项目插入列表的特定位置,则应在不指定父控件的情况下创建该项目。随后应使用insertItem() 函数将其放置到列表中。列表控件将接管该项目的所有权。
QListWidgetItem *newItem = new QListWidgetItem;
newItem->setText(itemText);
listWidget->insertItem(row, newItem);对于多个项目,可以使用insertItems() 代替。列表中的项目数量可通过count() 函数获取。要从列表中移除项目,请使用takeItem()。
可通过currentItem() 获取列表中的当前项目,并通过setCurrentItem() 更改当前项目。用户还可以通过键盘导航或点击其他项目来更改当前项目。当当前项目发生变化时,会触发currentItemChanged() 信号,并包含新的当前项目以及之前的当前项目。
另请参阅 QListWidgetItem 、QListView 、QTreeView 、模型/视图编程以及“选项卡”对话框示例。
属性文档
[read-only] count : 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) |
[since 6.10] supportedDragActions : Qt::DropActions
该属性存储了此视图支持的拖动操作
该枚举在 Qt 6.10 中引入。
访问函数:
| Qt::DropActions | supportedDragActions() const |
| void | setSupportedDragActions(Qt::DropActions actions) |
另请参阅 Qt::DropActions 和supportedDropActions()。
成员函数文档
[explicit] QListWidget::QListWidget(QWidget *parent = nullptr)
使用给定的parent 构造一个空的QListWidget。
[virtual noexcept] QListWidget::~QListWidget()
销毁列表控件及其所有项目。
void QListWidget::addItem(QListWidgetItem *item)
将item 插入到列表控件的末尾。
警告:一个 QListWidgetItem 只能向QListWidget 添加一次。若向QListWidget 多次添加相同的QListWidgetItem ,将导致未定义行为。
另请参阅 insertItem()。
void QListWidget::addItem(const QString &label)
在列表控件的末尾插入一个内容为“label ”的项目。
void QListWidget::addItems(const QStringList &labels)
在列表控件末尾插入包含文本“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 表示当前项目的行号。如果没有当前项目,则currentRow 的值为-1。
注意: 这是属性currentRow 的Notifier 信号。
[signal] void QListWidget::currentTextChanged(const QString ¤tText)
每当当前项目发生变化时,都会触发此信号。
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 ,该操作以给定的action 结束于给定的index 中。如果模型能够处理data 和action ,则返回true ;否则返回false 。
另请参阅 supportedDropActions() 和supportedDragActions 。
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 。
注意:在 Qt 5.10 之前的版本中,此函数接受的item 不是const 类型。
void QListWidget::insertItem(int row, QListWidgetItem *item)
将item 插入到列表中由row 指定的位置。
另请参阅 addItem()。
void QListWidget::insertItem(int row, const QString &label)
在列表控件中,将文本为“label ”的项目插入到由row 指定的位置。
另请参阅 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 处项的指针。该坐标相对于列表控件的viewport()方法。
QListWidgetItem *QListWidget::itemAt(int x, int y) const
返回位于坐标 (x,y) 处的项的指针。这些坐标是相对于列表控件的viewport() 函数的。
这是一个重载函数。
[signal] void QListWidget::itemChanged(QListWidgetItem *item)
每当item 的数据发生变化时,就会触发此信号。
[signal] void QListWidget::itemClicked(QListWidgetItem *item)
当在小部件中的某个项目上单击鼠标按钮时,会触发此信号,并传递指定的item 。
另请参阅 itemPressed() 和itemDoubleClicked()。
[signal] void QListWidget::itemDoubleClicked(QListWidgetItem *item)
当在小部件中的某个项目上双击鼠标按钮时,会发出此信号,并附带指定的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)
当在小部件中的某个项目上按下鼠标按钮时,会发出此信号,并附带指定的item 。
另请参阅 itemClicked() 和itemDoubleClicked()。
[signal] void QListWidget::itemSelectionChanged()
每当选中内容发生变化时,都会发出此信号。
另请参阅 selectedItems()、QListWidgetItem::isSelected() 和currentItemChanged()。
QWidget *QListWidget::itemWidget(QListWidgetItem *item) const
返回在给定的item 中显示的小部件。
另请参阅 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
返回一个 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
返回列表控件中所有已选中项的列表。
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)
将当前行设置为给定的row ,并使用给定的command ,
注意: 这是属性currentRow 的设置 函数。
另请参阅 currentRow()。
void QListWidget::setItemWidget(QListWidgetItem *item, QWidget *widget)
将widget 设置为在给定的item 中显示。
此函数仅应用于在列表控件项的位置显示静态内容。若要显示自定义动态内容或实现自定义编辑器控件,请改用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 对列表控件中的所有项目进行排序。
[virtual protected] Qt::DropActions QListWidget::supportedDropActions() const
返回该视图支持的拖放操作。
另请参阅 Qt::DropActions 、supportedDragActions 以及dropMimeData()。
QListWidgetItem *QListWidget::takeItem(int row)
从列表控件中移除并返回指定row 中的项目;否则返回nullptr 。
从列表控件中移除的项目将不再由 Qt 管理,需要手动删除。
另请参阅 insertItem()和addItem()。
QRect QListWidget::visualItemRect(const QListWidgetItem *item) const
返回该项在视口内所占的矩形区域,坐标为item 。
© 2026 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.