QTreeView 类
QTreeWidget类提供了一个使用预定义树模型的树视图。
Header: | #include < QTreeView > |
---|---|
qmake: | QT += widgets |
Inherits: | QAbstractItemView |
Inherited By: | QTreeWidget |
详述
QTreeView实现了一个模型中项目的树状表示。这个类用于提供以前由QListView类提供的标准层次列表,但是使用了Qt的模型/视图体系结构提供的更灵活的方法。
QTreeView类是一个模型/视图类,是Qt模型/视图框架的一部分。
QTreeView实现了QAbstractItemView类定义的接口,允许它显示由QAbstractItemModel类派生的模型提供的数据。
构造一个显示模型数据的树形视图是很简单的。在下面的例子中,目录的内容是由QFileSystemModel提供的,并以树的形式显示:
QFileSystemModel *model = new QFileSystemModel;
model->setRootPath(QDir::currentPath());
QTreeView *tree = new QTreeView(splitter);
tree->setModel(model);
模型/视图体系结构确保树视图的内容随着模型的变化而更新。
包含子项的项可以处于展开(子项可见)或折叠(子项隐藏)状态。当这个状态改变时,一个collapse()或expanded()信号将与相关项的模型索引一起发出。
用于表示层次结构级别的缩进量由 indentation 缩进属性控制。
树视图中的头部是使用QHeaderView类构造的,可以使用header()->hide()隐藏。注意,每个头文件都配置了stretchLastSection属性设置为true,确保视图不会浪费分配给它的头文件的任何空间。如果将此值设置为true,则此属性将覆盖标题中最后一部分设置的调整大小模式。
默认情况下,树视图中的所有列都是可移动的,除了第一个列。要禁用这些列的移动,可以使用QHeaderView的setSectionsMovable()函数。有关重新安排节的详细信息,请参见移动标题节。
键绑定
QTreeView支持一组键绑定,使用户能够在视图中导航并与条目的内容进行交互:
Keys | Action |
---|---|
Up | 将光标移动到前一行同列中的项目。如果当前项的父项没有更多的行可供导航,则光标将移动到父项之前的同级项的最后一行中的相关项。 |
Down | 将光标移动到下一行同列中的项目。如果当前项的父项没有更多的行要导航,光标将移动到父项后面同级的第一行中的相关项。 |
Left | 通过折叠分支隐藏当前项(如果存在)的子项。 |
Minus | Left |
Right | 通过展开分支显示当前项(如果存在)的子项。 |
Plus | Right |
Asterisk | 展开当前项及其所有子项(如果存在)。 |
PageUp | 将光标上移一页。 |
PageDown | 将光标向下移动一页。 |
Home | 将光标移动到模型中第一个顶级项的第一行的同一列中的一个项。 |
End | 将光标移动到模型中最后一个顶级项的最后一行的同一列中的一个项。 |
F2 | 在可编辑模型中,这将打开当前项目进行编辑。Escape键可用于取消编辑过程并恢复对所显示数据的任何更改。 |
提高性能
在显示大量项时,可以为视图提供有关它正在处理的数据的提示,以提高其性能。对于想要显示高度相等的项的视图,可以采用的一种方法是将uniformRowHeights属性设置为true。
属性
- allColumnsShowFocus: bool 项目是否应显示所有列的键盘焦点 false
- animated: bool 是否启用动画 false
- autoExpandDelay: int
- expandsOnDoubleClick: bool
- headerHidden: bool
- indentation: int
- itemsExpandable: bool
- rootIsDecorated: bool 是否显示展开和折叠顶级项的控件 true
- sortingEnabled: bool 是否启用排序 false
- uniformRowHeights: bool
- wordWrap: bool
公共函数
构造析构
- QTreeView(QWidget *parent = nullptr)
- virtual ~QTreeView()
属性
- bool allColumnsShowFocus() const
- void setAllColumnsShowFocus(bool enable)
- bool isAnimated() const
- void setAnimated(bool enable)
- int autoExpandDelay() const
- void setExpandsOnDoubleClick(bool enable)
- void setAutoExpandDelay(int delay)
- bool expandsOnDoubleClick() const
- bool isHeaderHidden() const
- void setHeaderHidden(bool hide)
- int indentation() const
- void setIndentation(int i)
- bool isSortingEnabled() const
- void setSortingEnabled(bool enable)
- bool itemsExpandable() const
- void setItemsExpandable(bool enable)
- bool rootIsDecorated() const
- void setRootIsDecorated(bool show)
- bool wordWrap() const
- void setWordWrap(bool on)
- bool uniformRowHeights() const
- void setUniformRowHeights(bool uniform)
常用函数
- int columnAt(int x) const
- int columnViewportPosition(int column) const
- void resetIndentation()
- QModelIndex indexAbove(const QModelIndex &index) const
- QModelIndex indexBelow(const QModelIndex &index) const
- int columnWidth(int column) const
- void setColumnWidth(int column, int width)
- QHeaderView * header() const
- void setHeader(QHeaderView *header)
- bool isColumnHidden(int column) const
- void setColumnHidden(int column, bool hide)
- bool isRowHidden(int row, const QModelIndex &parent) const
- void setRowHidden(int row, const QModelIndex &parent, bool hide)
- bool isExpanded(const QModelIndex &index) const
- void setExpanded(const QModelIndex &index, bool expanded)
- bool isFirstColumnSpanned(int row, const QModelIndex &parent) const
- void setFirstColumnSpanned(int row, const QModelIndex &parent, bool span)
- int treePosition() const
- void setTreePosition(int index)
重写公用函数
- virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector< int> &roles = QVector< int>()) override
- virtual QModelIndex indexAt(const QPoint &point) const override
- virtual void keyboardSearch(const QString &search) override
- virtual void reset() override
- virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint = EnsureVisible) override
- virtual void selectAll() override
- virtual void setModel(QAbstractItemModel *model) override
- virtual void setRootIndex(const QModelIndex &index) override
- virtual void setSelectionModel(QItemSelectionModel *selectionModel) override
- virtual QRect visualRect(const QModelIndex &index) const override
公用槽
- void collapse(const QModelIndex &index)
- void collapseAll()
- void expand(const QModelIndex &index)
- void expandAll()
- void expandRecursively(const QModelIndex &index, int depth = -1)
- void expandToDepth(int depth)
- void hideColumn(int column)
- void resizeColumnToContents(int column)
- void showColumn(int column)
- void sortByColumn(int column, Qt::SortOrder order)
信号
- void collapsed(const QModelIndex &index)
- void expanded(const QModelIndex &index)
受保护的函数
- virtual void drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const
- virtual void drawRow(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
- void drawTree(QPainter *painter, const QRegion ®ion) const
- int indexRowSizeHint(const QModelIndex &index) const
- int rowHeight(const QModelIndex &index) const
受保护的重写函数
- virtual void currentChanged(const QModelIndex ¤t, const QModelIndex &previous) override
- virtual void dragMoveEvent(QDragMoveEvent *event) override
- virtual int horizontalOffset() const override
- virtual bool isIndexHidden(const QModelIndex &index) const override
- virtual void keyPressEvent(QKeyEvent *event) override
- virtual void mouseDoubleClickEvent(QMouseEvent *event) override
- virtual void mouseMoveEvent(QMouseEvent *event) override
- virtual void mousePressEvent(QMouseEvent *event) override
- virtual void mouseReleaseEvent(QMouseEvent *event) override
- virtual QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers) override
- virtual void paintEvent(QPaintEvent *event) override
- virtual void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) override
- virtual void rowsInserted(const QModelIndex &parent, int start, int end) override
- virtual void scrollContentsBy(int dx, int dy) override
- virtual QModelIndexList selectedIndexes() const override
- virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) override
- virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) override
- virtual int sizeHintForColumn(int column) const override
- virtual void timerEvent(QTimerEvent *event) override
- virtual void updateGeometries() override
- virtual int verticalOffset() const override
- virtual bool viewportEvent(QEvent *event) override
- virtual QSize viewportSizeHint() const override
- virtual QRegion visualRegionForSelection(const QItemSelection &selection) const override
受保护的槽
- void columnCountChanged(int oldCount, int newCount)
- void columnMoved()
- void columnResized(int column, int oldSize, int newSize)
- void rowsRemoved(const QModelIndex &parent, int start, int end)
参考
- QListView
- QTreeWidget
- View Classes
- QAbstractItemModel
- QAbstractItemView
- Dir View Example.