2010-04-15 215 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

相关问题