本页内容

QTreeWidget Class

QTreeWidget 类提供了一个使用预定义树模型的树形视图。更多内容...

头文件: #include <QTreeWidget>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
继承自: QTreeView

属性

公共函数

QTreeWidget(QWidget *parent = nullptr)
virtual ~QTreeWidget()
void addTopLevelItem(QTreeWidgetItem *item)
void addTopLevelItems(const QList<QTreeWidgetItem *> &items)
void closePersistentEditor(QTreeWidgetItem *item, int column = 0)
int columnCount() const
int currentColumn() const
QTreeWidgetItem *currentItem() const
void editItem(QTreeWidgetItem *item, int column = 0)
QList<QTreeWidgetItem *> findItems(const QString &text, Qt::MatchFlags flags, int column = 0) const
QTreeWidgetItem *headerItem() const
QModelIndex indexFromItem(const QTreeWidgetItem *item, int column = 0) const
int indexOfTopLevelItem(QTreeWidgetItem *item) const
void insertTopLevelItem(int index, QTreeWidgetItem *item)
void insertTopLevelItems(int index, const QList<QTreeWidgetItem *> &items)
QTreeWidgetItem *invisibleRootItem() const
bool isPersistentEditorOpen(QTreeWidgetItem *item, int column = 0) const
QTreeWidgetItem *itemAbove(const QTreeWidgetItem *item) const
QTreeWidgetItem *itemAt(const QPoint &p) const
QTreeWidgetItem *itemAt(int x, int y) const
QTreeWidgetItem *itemBelow(const QTreeWidgetItem *item) const
QTreeWidgetItem *itemFromIndex(const QModelIndex &index) const
QWidget *itemWidget(QTreeWidgetItem *item, int column) const
void openPersistentEditor(QTreeWidgetItem *item, int column = 0)
void removeItemWidget(QTreeWidgetItem *item, int column)
QList<QTreeWidgetItem *> selectedItems() const
void setColumnCount(int columns)
void setCurrentItem(QTreeWidgetItem *item)
void setCurrentItem(QTreeWidgetItem *item, int column)
void setCurrentItem(QTreeWidgetItem *item, int column, QItemSelectionModel::SelectionFlags command)
void setHeaderItem(QTreeWidgetItem *item)
void setHeaderLabel(const QString &label)
void setHeaderLabels(const QStringList &labels)
void setItemWidget(QTreeWidgetItem *item, int column, QWidget *widget)
void setSupportedDragActions(Qt::DropActions actions)
int sortColumn() const
void sortItems(int column, Qt::SortOrder order)
Qt::DropActions supportedDragActions() const
QTreeWidgetItem *takeTopLevelItem(int index)
QTreeWidgetItem *topLevelItem(int index) const
int topLevelItemCount() const
QRect visualItemRect(const QTreeWidgetItem *item) const

重新实现的公共函数

virtual void setSelectionModel(QItemSelectionModel *selectionModel) override

公共插槽

void clear()
void collapseItem(const QTreeWidgetItem *item)
void expandItem(const QTreeWidgetItem *item)
void scrollToItem(const QTreeWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible)

信号

void currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
void itemActivated(QTreeWidgetItem *item, int column)
void itemChanged(QTreeWidgetItem *item, int column)
void itemClicked(QTreeWidgetItem *item, int column)
void itemCollapsed(QTreeWidgetItem *item)
void itemDoubleClicked(QTreeWidgetItem *item, int column)
void itemEntered(QTreeWidgetItem *item, int column)
void itemExpanded(QTreeWidgetItem *item)
void itemPressed(QTreeWidgetItem *item, int column)
void itemSelectionChanged()

受保护函数

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

重新实现的受保护函数

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

详细说明

以树形结构显示目录内容的目录

QTreeWidget 类是一个便利类,它提供了一个标准树控件,其经典的基于项的接口与 Qt 3 中QListView 类所使用的类似。该类基于 Qt 的模型/视图架构,并使用默认模型来存储项,其中每一项都是一个QTreeWidgetItem 。

不需要“模型/视图”框架灵活性的开发者,可以使用该类非常轻松地创建简单的分层列表。更灵活的方法是将QTreeView 与标准项目模型结合使用,这样可以将数据的存储与其表示形式分离。

在最简单的情况下,树控件可以按以下方式构建:

auto *treeWidget = new QTreeWidget();
treeWidget->setColumnCount(1);
for (int i = 0; i < 10; ++i)
    new QTreeWidgetItem(treeWidget, { tr("item: %1").arg(i) });

在向树控件添加项目之前,必须通过 `setColumnCount()` 设置列数。这使得每个项目可以拥有一个或多个标签或其他装饰元素。可通过 `columnCount()` 函数获取当前使用的列数。

树控件可以拥有一个标题栏,其中包含控件中每列对应的区域。最简单的方法是通过setHeaderLabels()函数传入一个字符串列表来设置各区域的标签,但也可以使用QTreeWidgetItem ()函数构建自定义标题栏,并通过setHeaderItem()函数将其插入树中。

树中的项目可以按照预定义的排序顺序按列进行排序。如果启用了排序功能,用户可以通过点击列标题对项目进行排序。可以通过调用setSortingEnabled()来启用或禁用排序功能。isSortingEnabled()函数用于指示排序是否已启用。

另请参阅 QTreeWidgetItem 、QTreeWidgetItemIterator 、QTreeView 以及模型/视图编程。

属性文档

columnCount : int

该属性用于指定树控件中显示的列数

默认情况下,该属性的值为 1。

访问函数:

int columnCount() const
void setColumnCount(int columns)

[since 6.10] supportedDragActions : Qt::DropActions

该属性存储了此视图支持的拖动操作

该枚举在 Qt 6.10 中引入。

访问函数:

Qt::DropActions supportedDragActions() const
void setSupportedDragActions(Qt::DropActions actions)

另请参阅 Qt::DropActions 和supportedDropActions()。

[read-only] topLevelItemCount : int

该属性存储顶级项目的数量

默认情况下,此属性的值为 0。

访问函数:

int topLevelItemCount() const

另请参阅 columnCount() 和currentItem()。

成员函数文档

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

根据给定的parent 构建一个树控件。

[virtual noexcept] QTreeWidget::~QTreeWidget()

销毁树控件及其所有项目。

void QTreeWidget::addTopLevelItem(QTreeWidgetItem *item)

将item 作为小部件中的顶级项目添加进去。

另请参阅 insertTopLevelItem()。

void QTreeWidget::addTopLevelItems(const QList<QTreeWidgetItem *> &items)

将items 列表作为小部件中的顶级项目追加进去。

另请参阅 insertTopLevelItems()。

[slot] void QTreeWidget::clear()

清除树控件,删除其中的所有项目和选中项。

注意:由于每个项目在被删除之前都会先从树控件中移除,因此当从项目的析构函数中调用QTreeWidgetItem::treeWidget() 时,其返回值将无效。

另请参阅 takeTopLevelItem()、topLevelItemCount() 和columnCount()。

void QTreeWidget::closePersistentEditor(QTreeWidgetItem *item, int column = 0)

关闭位于给定column 中的item 的持久化编辑器。

如果该项与列的组合下没有打开的持久化编辑器,则此函数无效果。

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

[slot] void QTreeWidget::collapseItem(const QTreeWidgetItem *item)

关闭item 。这将导致包含该项子项的树被折叠。

另请参阅 expandItem()、currentItem()、itemAt() 和topLevelItem()。

int QTreeWidget::currentColumn() const

返回树控件中的当前列。

另请参阅 setCurrentItem() 和columnCount()。

QTreeWidgetItem *QTreeWidget::currentItem() const

返回树控件中的当前项。

另请参阅 setCurrentItem() 和currentItemChanged()。

[signal] void QTreeWidget::currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)

当当前项目发生变化时,会触发此信号。当前项目由 `current` 指定,该方法会替换 `previous ` 中的当前项目。

另请参阅 setCurrentItem()。

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

重写了:QAbstractItemView::dropEvent(QDropEvent *event)。

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

处理由拖放操作提供的data ,该操作以给定的action 结束,且该 位于给定parent 项中的index 中。

如果通过解码 MIME 数据并将其插入模型成功处理了拖放操作,则默认实现返回 `true `;否则返回 `false`。

另请参阅 supportedDropActions() 和supportedDragActions 。

void QTreeWidget::editItem(QTreeWidgetItem *item, int column = 0)

如果给定的column 中的item 可编辑,则开始对其进行编辑。

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

重写了:QAbstractItemView::event(QEvent *event)。

[slot] void QTreeWidget::expandItem(const QTreeWidgetItem *item)

展开item 。这将导致包含该项子项的树被展开。

另请参阅 collapseItem()、currentItem()、itemAt()、topLevelItem() 以及itemExpanded()。

QList<QTreeWidgetItem *> QTreeWidget::findItems(const QString &text, Qt::MatchFlags flags, int column = 0) const

返回一个项目列表,其中包含符合给定text 的项,使用给定的flags ,在给定的column 中。

QTreeWidgetItem *QTreeWidget::headerItem() const

返回用于树控件标题的项。

另请参阅 setHeaderItem()。

QModelIndex QTreeWidget::indexFromItem(const QTreeWidgetItem *item, int column = 0) const

返回与给定的item 在给定的column 中关联的QModelIndex 。

注意:在 Qt 5.7 之前的版本中,此函数接受的item 并非const 类型。

另请参阅 itemFromIndex() 和topLevelItem()。

int QTreeWidget::indexOfTopLevelItem(QTreeWidgetItem *item) const

返回给定顶级item 的索引,如果找不到该项,则返回-1。

另请参阅 sortItems() 和topLevelItemCount()。

void QTreeWidget::insertTopLevelItem(int index, QTreeWidgetItem *item)

将位于index 的“item ”插入到视图的顶层。

如果该项已插入到其他位置,则不会再次插入。

另请参阅 addTopLevelItem() 和columnCount()。

void QTreeWidget::insertTopLevelItems(int index, const QList<QTreeWidgetItem *> &items)

将index 上的items 列表插入到视图的顶层。

已插入到其他位置的项目将不会被重复插入。

另请参阅 addTopLevelItems()。

QTreeWidgetItem *QTreeWidget::invisibleRootItem() const

返回树控件的不可见根项。

该不可见根项通过QTreeWidgetItem API 提供对树控件顶级项的访问,从而能够编写以统一方式处理顶级项及其子项的函数;例如,递归函数。

bool QTreeWidget::isPersistentEditorOpen(QTreeWidgetItem *item, int column = 0) const

返回是否为列column 中的项item 打开了持久化编辑器。

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

QTreeWidgetItem *QTreeWidget::itemAbove(const QTreeWidgetItem *item) const

返回位于给定item 上方的一项。

[signal] void QTreeWidget::itemActivated(QTreeWidgetItem *item, int column)

当用户通过单击或双击(取决于平台,即QStyle::SH_ItemView_ActivateItemOnSingleClick 样式提示)或按下特殊键(例如Enter )激活某个项目时,会触发此信号。

指定的item 是被点击的项目,如果未点击任何项目,则为nullptr 。column 是被点击的项目的列,如果未点击任何项目,则为-1。

QTreeWidgetItem *QTreeWidget::itemAt(const QPoint &p) const

返回位于坐标p 处项的指针。该坐标相对于树控件的viewport()。

另请参阅 visualItemRect()。

QTreeWidgetItem *QTreeWidget::itemAt(int x, int y) const

返回位于坐标 (x,y) 处的项目的指针。这些坐标是相对于树控件的viewport() 函数的。

这是一个重载函数。

QTreeWidgetItem *QTreeWidget::itemBelow(const QTreeWidgetItem *item) const

返回在视觉上位于给定item 下方的一项。

[signal] void QTreeWidget::itemChanged(QTreeWidgetItem *item, int column)

当指定item 中的column 内容发生变化时,会发出此信号。

[signal] void QTreeWidget::itemClicked(QTreeWidgetItem *item, int column)

当用户在控件内部单击时,会触发此信号。

指定的item 即为被点击的项目。column 则是该项目中被点击的列。如果未点击任何项目,则不会发出任何信号。

[signal] void QTreeWidget::itemCollapsed(QTreeWidgetItem *item)

当指定的item 被折叠,以致其所有子项均不再显示时,将触发此信号。

注意: 如果在调用collapseAll() 时某项改变了状态,则不会触发此 信号。

另请参阅 QTreeWidgetItem::isExpanded()、itemExpanded() 和collapseItem()。

[signal] void QTreeWidget::itemDoubleClicked(QTreeWidgetItem *item, int column)

当用户在小部件内部双击时,会触发此信号。

指定的item 是被点击的项目,如果未点击任何项目,则为nullptr 。column 是该项目中被点击的列。如果未双击任何项目,则不会发出任何信号。

[signal] void QTreeWidget::itemEntered(QTreeWidgetItem *item, int column)

当鼠标光标进入位于指定column 上的item 时,会触发此信号。QTreeWidget 需启用鼠标跟踪功能,此功能才能正常工作。

[signal] void QTreeWidget::itemExpanded(QTreeWidgetItem *item)

当指定的item 被展开,使其所有子节点均显示出来时,将发出此信号。

另请参阅 QTreeWidgetItem::isExpanded()、itemCollapsed() 和expandItem()。

QTreeWidgetItem *QTreeWidget::itemFromIndex(const QModelIndex &index) const

返回与给定的 `index` 关联的 `QTreeWidgetItem ` 的指针。

另请参阅 indexFromItem()。

[signal] void QTreeWidget::itemPressed(QTreeWidgetItem *item, int column)

当用户在小部件内部点击鼠标按钮时,会触发此信号。

指定的item 是被点击的项目;如果未点击任何项目,则为nullptr 。column 是被点击的项目的列号;如果未点击任何项目,则为-1。

[signal] void QTreeWidget::itemSelectionChanged()

当树控件中的选中项发生变化时,会触发此信号。可通过selectedItems()获取当前选中项。

QWidget *QTreeWidget::itemWidget(QTreeWidgetItem *item, int column) const

返回由item 指定的单元格中显示的小部件以及给定的column 。

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

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

返回一个包含指定items 序列化描述的对象。用于描述项的格式由mimeTypes()函数提供。

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

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

返回一个 MIME 类型列表,该列表可用于描述一组树控件项。

另请参阅 mimeData()。

void QTreeWidget::openPersistentEditor(QTreeWidgetItem *item, int column = 0)

在指定的column 中为item 打开一个持久化编辑器。

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

void QTreeWidget::removeItemWidget(QTreeWidgetItem *item, int column)

删除指定item 中位于指定column 的控件集。

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

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

确保item 可见,并在必要时使用指定的hint 滚动视图。

另请参阅 currentItem()、itemAt() 和topLevelItem()。

QList<QTreeWidgetItem *> QTreeWidget::selectedItems() const

返回所有已选中且未隐藏的项目列表。

另请参阅 itemSelectionChanged()。

void QTreeWidget::setCurrentItem(QTreeWidgetItem *item)

设置树控件中的当前item 。

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

另请参阅 currentItem() 和currentItemChanged()。

void QTreeWidget::setCurrentItem(QTreeWidgetItem *item, int column)

将树形控件中的当前item 和当前列设置为column 。

另请参阅 currentItem()。

void QTreeWidget::setCurrentItem(QTreeWidgetItem *item, int column, QItemSelectionModel::SelectionFlags command)

使用给定的command ,将树形控件中的当前item 和当前列设置为column 。

另请参阅 currentItem()。

void QTreeWidget::setHeaderItem(QTreeWidgetItem *item)

为树形控件设置标题item 。标题中各列的标签由项目中的相应标签提供。

树控件将获得该项的所有权。

另请参阅 headerItem() 和setHeaderLabels()。

void QTreeWidget::setHeaderLabel(const QString &label)

与setHeaderLabels (QStringList (label ))相同。

void QTreeWidget::setHeaderLabels(const QStringList &labels)

为labels 列表中的每个项目在表头添加一列,并设置每列的标签。

请注意,setHeaderLabels() 不会删除现有的列。

另请参阅 setHeaderItem() 和setHeaderLabel()。

void QTreeWidget::setItemWidget(QTreeWidgetItem *item, int column, QWidget *widget)

将给定的widget 设置为在由给定的item 和column 指定的单元格中显示。

所给widget 的autoFillBackground 属性必须设置为true,否则控件的背景将呈透明状,同时显示模型数据和树控件项。

此函数仅应用于在树控件项的位置显示静态内容。若要显示自定义动态内容或实现自定义编辑器控件,请改用QTreeView 并继承QStyledItemDelegate 类。

在项目层次结构建立之前,不能调用此函数,即在设置 `widget ` 之前,必须已将包含 `widget ` 的 `QTreeWidgetItem ` 添加到视图中。

注意:树将 拥有widget 的所有权。

另请参阅 itemWidget()、removeItemWidget() 以及委托类。

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

重写:QTreeView::setSelectionModel(QItemSelectionModel *selectionModel)。

int QTreeWidget::sortColumn() const

返回用于对小部件内容进行排序的列。

另请参阅 sortItems()。

void QTreeWidget::sortItems(int column, Qt::SortOrder order)

根据给定的column 中的值,按指定的order 对小部件中的项目进行排序。

另请参阅 sortColumn()。

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

返回该视图支持的拖放操作。

另请参阅 Qt::DropActions 、supportedDragActions 以及dropMimeData()。

QTreeWidgetItem *QTreeWidget::takeTopLevelItem(int index)

删除树中位于指定index 的顶级节点并返回该节点,否则返回nullptr ;

另请参阅 insertTopLevelItem()、topLevelItem() 和topLevelItemCount()。

QTreeWidgetItem *QTreeWidget::topLevelItem(int index) const

返回给定index 下的顶级项目;如果该项目不存在,则返回nullptr 。

另请参阅 topLevelItemCount() 和insertTopLevelItem()。

QRect QTreeWidget::visualItemRect(const QTreeWidgetItem *item) const

返回该项在视口内所占的矩形区域,坐标为item 。

另请参阅 itemAt()。

© 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.