一、描述
QTreeView 實作了模型中項目的樹表示。
建構一個樹視圖顯示模型中的資料很簡單。 在以下示例中,目錄的内容由 QFileSystemModel 提供并顯示為樹:
QFileSystemModel *model = new QFileSystemModel;
model->setRootPath(QDir::currentPath());
QTreeView *tree = new QTreeView(splitter);
tree->setModel(model);
模型/視圖架構確定樹視圖的内容随着模型的變化而更新。具有子項的項目可以處于展開(子項可見)或折疊(子項隐藏)狀态。
鍵綁定
QTreeView 支援一組鍵綁定,使使用者能夠在視圖中導航并與項目的内容進行互動:
- Up:将光标移動到上一行同一列中的項目。如果目前項的父項沒有更多行可導航到,則光标将移動到父項之前的同級項的最後一行中的相關項。
- Down:移動光标到下一行同一列中的項目。如果目前項的父項沒有更多行可導航到,則光标移動到父項之後的同級項的第一行中的相關項。
- Left:通過折疊分支隐藏目前項目(如果存在)的子項。
- Minus:與Left相同。
- Right:通過擴充分支顯示目前項(如果存在)的子項。
- Plus:與 Right 相同。
- Asterisk(星号):展開目前項目及其所有子項(如果存在)。
- PageUp:将光标向上移動一頁。
- PageDown:将光标向下移動一頁。
- Home:将光标移動到模型中第一個頂級項目的第一行的同一列中的項目。
- End:将光标移動到模型中最後一個頂級項目的最後一行的同一列中的項目。
- F2:在可編輯模型中,這将打開目前項目進行編輯。Escape 鍵可用于取消編輯過程并恢複對顯示資料的任何更改。
提高性能
可以向視圖提供有關它正在處理的資料的提示,以便在顯示大量項目時提高其性能。對于旨在顯示具有相同高度的項目的視圖,可以采用的一種方法是将 uniformRowHeights 屬性設定為 true。
二、屬性成員
1、allColumnsShowFocus : bool
項目是否應使用所有列顯示鍵盤焦點。預設值為false。
如果此屬性為 true,則所有列都将顯示焦點,否則隻有一列将顯示焦點。
2、animated : bool
是否啟用動畫。預設為 false。如果為true,則樹視圖将為分支的擴充和折疊設定動畫。
3、autoExpandDelay : int
在拖放操作期間打開樹中的項目之前的延遲時間(毫秒)。預設為 -1,表示禁用延遲。
4、expandsOnDoubleClick : bool
是否可以通過輕按兩下展開。預設為true。
5、headerHidden : bool
是否顯示标題。預設為false。
6、indentation : int
樹視圖中項目的縮進。對于頂級項目,縮進指定了從視口邊緣到第一列項目的水準距離。對于子項,它指定其父項的縮進。
預設情況下,此屬性的值取決于樣式。是以,當樣式更改時,此屬性會随之更新。調用 setIndentation() 停止更新,調用 resetIndentation() 将恢複預設行為。
7、itemsExpandable : bool
項目是否可由使用者展開。預設為 true。
8、rootIsDecorated : bool
是否顯示用于展開和折疊頂級項目的控件。預設情況下,此屬性為 true。
帶有子項的項目通常顯示有用于展開和折疊它們的控件,進而允許顯示或隐藏其子項。如果此屬性為 false,可用于使單級樹結構看起來像一個簡單的項目清單。
9、sortingEnabled : bool
此屬性儲存是否啟用排序。預設值為false。
注意:為了避免性能問題,建議在将項目插入樹後啟用排序。也可以在将項目插入樹之前将項目插入到清單中。
10、uniformRowHeights : bool
樹視圖中的所有項目是否具有相同的高度。
高度是從視圖中的第一項獲得的。當該項的資料發生變化時,它會更新。
11、wordWrap : bool
項目文本自動換行政策。如果為true,則項目文本會在必要的斷字處換。預設為 false。
三、成員函數
1、void collapse(const QModelIndex &index)
折疊索引指定的模型項。
2、void collapseAll()
折疊所有展開的項目。
3、[signal] void collapsed(const QModelIndex &index)
當索引指定的項目折疊時發出此信号。
4、void expand(const QModelIndex &index)
展開索引指定的模型項。
5、void expandAll()
展開所有可展開的項目。如果模型包含大量項目,此功能将需要一些時間來執行。
6、void expandRecursively(const QModelIndex &index, int depth = -1)
将給定索引處的項目及其所有子項擴充到給定深度。深度是相對于給定索引的。 深度為 -1 将擴充所有子項,深度為 0 将僅擴充給定索引。
如果模型包含大量項目,此功能将需要一些時間來執行。
7、void expandToDepth(int depth)
将所有可擴充項目擴充到給定深度。
8、[signal] void expanded(const QModelIndex &index)
當索引指定的項目被擴充時,會發出此信号。
9、void hideColumn(int column) / void showColumn(int column)
隐藏/顯示給定的列。這個函數隻能在模型初始化後調用,因為視圖需要知道列數才能操作。
10、void resizeColumnToContents(int column)
将列的大小調整為其内容的大小。
11、void sortByColumn(int column, Qt::SortOrder order)
按給定列中的值和順序對模型進行排序。