如何自动换行 QTreeWidgetItem
Posted
技术标签:
【中文标题】如何自动换行 QTreeWidgetItem【英文标题】:How to word wrap a QTreeWidgetItem 【发布时间】:2011-01-23 02:57:59 【问题描述】:我必须用可能太长而无法放入一行的项目(或项目的子项)填充 QTreeWidget,因此我正在寻找一种自动换行它们的方法。
我想
myQTreeWidget.setWordWrap(True)
(通过 QtDesigner4 完成)本来可以完成这项工作,但情况似乎并非如此。
我不知道这是否相关,但树被封装在拆分器框架中,因此包装应该是动态的,以允许调整拆分器的大小。
有什么想法吗?我使用 PyQt4,但任何语言/绑定的提示都将不胜感激。
【问题讨论】:
【参考方案1】:setWordWrap
只是导致环绕单词边界...它不会强制任何内容进入新行。
您正在寻找的是不可能默认QTreeWidget
。我建议以另一种方式显示太长的文本,例如鼠标悬停文本或单独的标签。 TreeViews 的每个项目不应包含超过一行的文本。
【讨论】:
真正的(动态)自动换行是不可能的。模拟自动换行的唯一方法是编写自己的自动换行函数,根据小部件的宽度向项目字符串添加换行符,然后创建一个信号以在小部件的大小发生变化时调用该函数. 我正在尝试将 QLabel 或 QText 封装在一个项目中,这样我就可以从文本框继承自动换行功能,无论它碰巧做正确的工作 @japs 它返回相同的结果prnt.sc/11x0f6f 你可以看到所有其他行也使用 2 个字符【参考方案2】:我成功找到了一种解决方法:我在 WidgetItem 中封装了一个 QLabel,将 QLabel 设置为具有自动换行功能。
item = QTreeWidgetItem()
label = QLabel('long text here')
label.setWordWrap(True)
MyTree.addTopLevelItem(item)
MyTree.setItemWidget(item, 0, label)
这种行为正是我们想要的!!
【讨论】:
很酷的解决方案,感谢分享。此外,您可能希望在答案中将“clinicalBox”更改为“label”。 呵呵,对不起!这就是天真的复制和粘贴会发生的事情:) 我在 QLabel 上遇到了间距问题:***.com/questions/21007272/… 您还可以实现自定义委托来执行此操作:***.com/questions/34623036/… 请注意,这对我有用,但我遇到了崩溃。根据这个问题,您需要为父级设置标签或保留对它的引用:***.com/questions/27644304/…。我选择了保留参考版本:self.label = QLabel('Long text here')
。 (我使用的是 PySide 1.2.0 版)以上是关于如何自动换行 QTreeWidgetItem的主要内容,如果未能解决你的问题,请参考以下文章