QTreeWidget Class
QTreeWidget 类提供了一个使用预定义树模型的树视图。更多
Header: | #include <QTreeWidget> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake: | QT += widgets |
继承: | QTreeView |
属性
- columnCount : int
- topLevelItemCount : const int
公共函数
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) |
int | sortColumn() const |
void | sortItems(int column, Qt::SortOrder order) |
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 |
重新实现的受保护函数
详细说明
QTreeWidget 类是一个方便的类,它提供了一个标准的树形 widget,该 widget 具有经典的基于项的接口,类似于 Qt 3 中QListView 类所使用的接口。该类基于 Qt 的 Model/View 架构,使用默认模型来保存项,每个项都是一个QTreeWidgetItem 。
不需要模型/视图框架灵活性的开发人员可以使用该类轻松创建简单的分层列表。更灵活的方法是将QTreeView 与标准项模型相结合。这样就可以将数据存储与数据表示分离开来。
最简单的树形部件可以按以下方式构建:
QTreeWidget *treeWidget = new QTreeWidget(); treeWidget->setColumnCount(1); QList<QTreeWidgetItem *> items; for (int i = 0; i < 10; ++i) items.append(new QTreeWidgetItem(static_cast<QTreeWidget *>(nullptr), QStringList(QString("item: %1").arg(i)))); treeWidget->insertTopLevelItems(0, items);
在向树状 widget 添加项目之前,必须使用setColumnCount() 设置列数。这样,每个项目就可以有一个或多个标签或其他装饰。使用columnCount() 函数可以找到正在使用的列数。
树形视图可以有一个标题,包含 widget 中每一列的部分。最简单的方法是通过setHeaderLabels() 提供一个字符串列表来设置每个部分的标签,但也可以通过QTreeWidgetItem 构建一个自定义页眉,并通过setHeaderItem() 函数插入到树中。
树中的项目可以根据预定义的排序顺序按列排序。如果启用了排序,用户可以通过点击列标题对项目进行排序。可以通过调用setSortingEnabled() 来启用或禁用排序。isSortingEnabled() 函数指示是否启用排序。
另请参阅 QTreeWidgetItem,QTreeWidgetItemIterator,QTreeView 和模型/视图编程。
属性文档
columnCount : int
该属性用于保存树状 widget 中显示的列数
默认情况下,此属性的值为 1。
访问功能:
int | columnCount() const |
void | setColumnCount(int columns) |
[read-only]
topLevelItemCount : const int
此属性保存顶层项的数量
默认情况下,此属性的值为 0。
访问函数:
int | topLevelItemCount() const |
另请参阅 columnCount() 和currentItem()。
成员函数文档
[explicit]
QTreeWidget::QTreeWidget(QWidget *parent = nullptr)
用给定的parent 构建树状 widget。
[virtual noexcept]
QTreeWidget::~QTreeWidget()
销毁树部件及其所有项目。
void QTreeWidget::addTopLevelItem(QTreeWidgetItem *item)
将item 作为顶层项目添加到 widget 中。
另请参阅 insertTopLevelItem().
void QTreeWidget::addTopLevelItems(const QList<QTreeWidgetItem *> &items)
将items 列表作为顶层项目添加到 widget 中。
另请参阅 insertTopLevelItems().
[slot]
void QTreeWidget::clear()
删除树状 widget 中的所有项目和选项,从而清除树状 widget。
注意:由于每个项目在删除前都会从树状 widget 中移除,因此从项目的析构函数调用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
返回树状 widget 中的当前列。
另请参阅 setCurrentItem() 和columnCount()。
QTreeWidgetItem *QTreeWidget::currentItem() const
返回树状 widget 中的当前项目。
另请参阅 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() 。
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
使用给定的flags ,返回在给定的column 中与给定的text 匹配的项目列表。
QTreeWidgetItem *QTreeWidget::headerItem() const
返回用于树状 widget 标题的项目。
另请参阅 setHeaderItem()。
QModelIndex QTreeWidget::indexFromItem(const QTreeWidgetItem *item, int column = 0) const
返回给定column 中与给定item 相关的QModelIndex 。
注: 在 5.7 之前的 Qt 版本中,此函数采取非const
item 。
另请参阅 itemFromIndex() 和topLevelItem()。
int QTreeWidget::indexOfTopLevelItem(QTreeWidgetItem *item) const
返回给定顶层item 的索引,如果找不到该项目,则返回-1。
另请参阅 sortItems() 和topLevelItemCount()。
void QTreeWidget::insertTopLevelItem(int index, QTreeWidgetItem *item)
将item 插入视图顶层的index 。
如果该项目已在其他地方插入,则不会插入。
另请参阅 addTopLevelItem() 和columnCount()。
void QTreeWidget::insertTopLevelItems(int index, const QList<QTreeWidgetItem *> &items)
在视图的顶层插入items index 的列表。
已在其他地方插入的项目不会被插入。
另请参阅 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)
当用户在 widget 内点击时会发出该信号。
指定的item 是被点击的项目。column 是被点击的项目列。如果没有项目被点击,则不会发出任何信号。
[signal]
void QTreeWidget::itemCollapsed(QTreeWidgetItem *item)
当指定的item 被折叠以便不显示其任何子项时,将发出此信号。
注意: 在调用collapseAll() 时,如果项目改变了状态,则不会发出此信号。
另请参阅 QTreeWidgetItem::isExpanded()、itemExpanded() 和collapseItem()。
[signal]
void QTreeWidget::itemDoubleClicked(QTreeWidgetItem *item, int column)
当用户在 widget 内双击时发出该信号。
指定的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)
当用户按下 widget 内的鼠标按钮时,就会发出该信号。
指定的item 是被点击的项目,如果没有项目被点击,则为nullptr
。column 是被点击的项目列,如果没有项目被点击,则为-1。
[signal]
void QTreeWidget::itemSelectionChanged()
当树部件中的选区发生变化时会发出该信号。当前选区可通过selectedItems() 找到。
QWidget *QTreeWidget::itemWidget(QTreeWidgetItem *item, int column) const
返回item 和给定的column 所指定单元格中显示的 widget。
另请参阅 setItemWidget() 和removeItemWidget()。
[virtual protected]
QMimeData *QTreeWidget::mimeData(const QList<QTreeWidgetItem *> &items) const
返回一个包含指定items 的序列化描述的对象。用于描述项目的格式可从mimeTypes() 函数中获取。
如果项目列表为空,则返回nullptr
,而不是序列化的空列表。
[virtual protected]
QStringList QTreeWidget::mimeTypes() const
返回可用于描述 treewidget 项目列表的 MIME 类型列表。
另请参阅 mimeData().
void QTreeWidget::openPersistentEditor(QTreeWidgetItem *item, int column = 0)
打开给定column 中item 的持久编辑器。
另请参阅 closePersistentEditor() 和isPersistentEditorOpen() 。
void QTreeWidget::removeItemWidget(QTreeWidgetItem *item, int column)
删除给定item 中的 Widget 设置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 ,将树状 widget 中当前的item 和当前列设置为column 。
另请参阅 currentItem() 。
void QTreeWidget::setHeaderItem(QTreeWidgetItem *item)
设置树状 widget 的标题item 。标题中每一列的标签由项目中相应的标签提供。
树状 widget 拥有项目的所有权。
另请参阅 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,否则 widget 的背景将是透明的,同时显示模型数据和树状 widget 项目。
此函数只能用于在树状 widget 项的位置显示静态内容。如果您想显示自定义动态内容或实现自定义编辑器部件,请使用QTreeView 和子类QStyledItemDelegate 。
在设置项目层次结构之前,不能调用此函数,也就是说,在设置widget 之前,必须已将包含widget 的QTreeWidgetItem 添加到视图中。
注意: 树拥有widget 的所有权。
另请参阅 itemWidget(),removeItemWidget() 和委托类。
[override virtual]
void QTreeWidget::setSelectionModel(QItemSelectionModel *selectionModel)
重实现:QTreeView::setSelectionModel(QItemSelectionModel *selectionModel).
int QTreeWidget::sortColumn() const
返回用于对 widget 内容排序的列。
另请参阅 sortItems()。
void QTreeWidget::sortItems(int column, Qt::SortOrder order)
根据给定column 中的值对指定order 中 widget 中的项目进行排序。
另请参阅 sortColumn() 。
[virtual protected]
Qt::DropActions QTreeWidget::supportedDropActions() const
返回此视图支持的下拉操作。
另请参阅 Qt::DropActions 。
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()。
© 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.