模型视图(16):【类】QTreeView[官翻]

QTreeView是Qt中用于显示模型数据的树状视图,支持模型/视图体系结构,允许显示由QAbstractItemModel派生的模型数据。用户可以通过键绑定进行交互,如上下左右移动、展开/折叠节点等。为了提高性能,可以设置uniformRowHeights属性确保行高一致。此外,QTreeView还提供了各种公共函数和槽用于定制和操作视图,如设置列宽、隐藏/显示列、排序等。
摘要由CSDN通过智能技术生成

QTreeView 类

QTreeWidget类提供了一个使用预定义树模型的树视图。

Header:#include < QTreeView >
qmake:QT += widgets
Inherits:QAbstractItemView
Inherited By:QTreeWidget

详述

img

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支持一组键绑定,使用户能够在视图中导航并与条目的内容进行交互:

KeysAction
Up将光标移动到前一行同列中的项目。如果当前项的父项没有更多的行可供导航,则光标将移动到父项之前的同级项的最后一行中的相关项。
Down将光标移动到下一行同列中的项目。如果当前项的父项没有更多的行要导航,光标将移动到父项后面同级的第一行中的相关项。
Left通过折叠分支隐藏当前项(如果存在)的子项。
MinusLeft
Right通过展开分支显示当前项(如果存在)的子项。
PlusRight
Asterisk展开当前项及其所有子项(如果存在)。
PageUp将光标上移一页。
PageDown将光标向下移动一页。
Home将光标移动到模型中第一个顶级项的第一行的同一列中的一个项。
End将光标移动到模型中最后一个顶级项的最后一行的同一列中的一个项。
F2在可编辑模型中,这将打开当前项目进行编辑。Escape键可用于取消编辑过程并恢复对所显示数据的任何更改。

提高性能

在显示大量项时,可以为视图提供有关它正在处理的数据的提示,以提高其性能。对于想要显示高度相等的项的视图,可以采用的一种方法是将uniformRowHeights属性设置为true。

属性

  1. allColumnsShowFocus: bool 项目是否应显示所有列的键盘焦点 false
  2. animated: bool 是否启用动画 false
  3. autoExpandDelay: int
  4. expandsOnDoubleClick: bool
  5. headerHidden: bool
  6. indentation: int
  7. itemsExpandable: bool
  8. rootIsDecorated: bool 是否显示展开和折叠顶级项的控件 true
  9. sortingEnabled: bool 是否启用排序 false
  10. uniformRowHeights: bool
  11. wordWrap: bool

公共函数

构造析构

  1. QTreeView(QWidget *parent = nullptr)
  2. virtual ~QTreeView()

属性

  1. bool allColumnsShowFocus() const
  2. void setAllColumnsShowFocus(bool enable)
  3. bool isAnimated() const
  4. void setAnimated(bool enable)
  5. int autoExpandDelay() const
  6. void setExpandsOnDoubleClick(bool enable)
  7. void setAutoExpandDelay(int delay)
  8. bool expandsOnDoubleClick() const
  9. bool isHeaderHidden() const
  10. void setHeaderHidden(bool hide)
  11. int indentation() const
  12. void setIndentation(int i)
  13. bool isSortingEnabled() const
  14. void setSortingEnabled(bool enable)
  15. bool itemsExpandable() const
  16. void setItemsExpandable(bool enable)
  17. bool rootIsDecorated() const
  18. void setRootIsDecorated(bool show)
  19. bool wordWrap() const
  20. void setWordWrap(bool on)
  21. bool uniformRowHeights() const
  22. void setUniformRowHeights(bool uniform)

常用函数

  1. int columnAt(int x) const
  2. int columnViewportPosition(int column) const
  3. void resetIndentation()
  4. QModelIndex indexAbove(const QModelIndex &index) const
  5. QModelIndex indexBelow(const QModelIndex &index) const
  6. int columnWidth(int column) const
  7. void setColumnWidth(int column, int width)
  8. QHeaderView * header() const
  9. void setHeader(QHeaderView *header)
  10. bool isColumnHidden(int column) const
  11. void setColumnHidden(int column, bool hide)
  12. bool isRowHidden(int row, const QModelIndex &parent) const
  13. void setRowHidden(int row, const QModelIndex &parent, bool hide)
  14. bool isExpanded(const QModelIndex &index) const
  15. void setExpanded(const QModelIndex &index, bool expanded)
  16. bool isFirstColumnSpanned(int row, const QModelIndex &parent) const
  17. void setFirstColumnSpanned(int row, const QModelIndex &parent, bool span)
  18. int treePosition() const
  19. void setTreePosition(int index)

重写公用函数

  1. virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector< int> &roles = QVector< int>()) override
  2. virtual QModelIndex indexAt(const QPoint &point) const override
  3. virtual void keyboardSearch(const QString &search) override
  4. virtual void reset() override
  5. virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint = EnsureVisible) override
  6. virtual void selectAll() override
  7. virtual void setModel(QAbstractItemModel *model) override
  8. virtual void setRootIndex(const QModelIndex &index) override
  9. virtual void setSelectionModel(QItemSelectionModel *selectionModel) override
  10. virtual QRect visualRect(const QModelIndex &index) const override

公用槽

  1. void collapse(const QModelIndex &index)
  2. void collapseAll()
  3. void expand(const QModelIndex &index)
  4. void expandAll()
  5. void expandRecursively(const QModelIndex &index, int depth = -1)
  6. void expandToDepth(int depth)
  7. void hideColumn(int column)
  8. void resizeColumnToContents(int column)
  9. void showColumn(int column)
  10. void sortByColumn(int column, Qt::SortOrder order)

信号

  1. void collapsed(const QModelIndex &index)
  2. void expanded(const QModelIndex &index)

受保护的函数

  1. virtual void drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const
  2. virtual void drawRow(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
  3. void drawTree(QPainter *painter, const QRegion &region) const
  4. int indexRowSizeHint(const QModelIndex &index) const
  5. int rowHeight(const QModelIndex &index) const

受保护的重写函数

  1. virtual void currentChanged(const QModelIndex &current, const QModelIndex &previous) override
  2. virtual void dragMoveEvent(QDragMoveEvent *event) override
  3. virtual int horizontalOffset() const override
  4. virtual bool isIndexHidden(const QModelIndex &index) const override
  5. virtual void keyPressEvent(QKeyEvent *event) override
  6. virtual void mouseDoubleClickEvent(QMouseEvent *event) override
  7. virtual void mouseMoveEvent(QMouseEvent *event) override
  8. virtual void mousePressEvent(QMouseEvent *event) override
  9. virtual void mouseReleaseEvent(QMouseEvent *event) override
  10. virtual QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers) override
  11. virtual void paintEvent(QPaintEvent *event) override
  12. virtual void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) override
  13. virtual void rowsInserted(const QModelIndex &parent, int start, int end) override
  14. virtual void scrollContentsBy(int dx, int dy) override
  15. virtual QModelIndexList selectedIndexes() const override
  16. virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) override
  17. virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) override
  18. virtual int sizeHintForColumn(int column) const override
  19. virtual void timerEvent(QTimerEvent *event) override
  20. virtual void updateGeometries() override
  21. virtual int verticalOffset() const override
  22. virtual bool viewportEvent(QEvent *event) override
  23. virtual QSize viewportSizeHint() const override
  24. virtual QRegion visualRegionForSelection(const QItemSelection &selection) const override

受保护的槽

  1. void columnCountChanged(int oldCount, int newCount)
  2. void columnMoved()
  3. void columnResized(int column, int oldSize, int newSize)
  4. void rowsRemoved(const QModelIndex &parent, int start, int end)

参考

  • QListView
  • QTreeWidget
  • View Classes
  • QAbstractItemModel
  • QAbstractItemView
  • Dir View Example.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值