2010-04-15 90 views
1

我想在QTreeWidget中製作具有多行內容的可編輯單元格,並將QPlainTextEdit作爲代理使用。我需要爲編輯和顯示之間切換順暢的所有行設置適當的大小,而不會有任何可見的更改。QTreeWidget設置每行的高度取決於內容

rect = textEdit.blockBoundingRect(textEdit.firstVisibleBlock()) 
  • 有了這個,我可以找出高度,我需要的行集,但我錯過了在那裏我可以做到這一點的地方。

如何在初始化階段爲QTreeWidget的行設置適當的高度以及如何處理它的更改?

回答

3

您需要重新實現委託的sizeHint()。它會自動處理行的高度和寬度。 注意,在這種情況下,QTreeWidget :: uniformRowHeight屬性必須爲false,儘管如果它包含許多行,它將減緩樹元素的渲染速度。

+0

謝謝,但我怎麼能從這個函數獲取當前部件?它不提供像setEditorData(QWidget *,QModelIndex&)或setModelData(QWidget *,QAbstractItemModel *,QModelIndex&)函數。 – serge 2010-04-15 11:35:45

+0

我還沒有弄清楚如何做到這一點,何時需要這樣做。我使用的解決方法是將代表的編輯器大小提示保存在模型的SizeHintRole中,當編輯結束並在沒有編輯器顯示時使用它。或者,最好是,你可以使用FontMetrics類,因爲你的項目的邊界矩形可以從它保存的文本中獲得。 所以,你會問,'初始化階段怎麼樣'。你可以通過幾種方法來實現:使用FontMetrics類來設置SizeHintRole或者從不可見的QPlainTextEdit中獲取它,將適當的文本放在它上面並要求綁定。 RECT。 – 2010-04-15 11:52:57

相關問題