如何自动换行 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的主要内容,如果未能解决你的问题,请参考以下文章

表格里如何自动换行?

notepad++ 如何自动换行

table不自动换行

poi如何设置word中的表格自动换行

EXCEL表格设定宽度以后,文字填满了如何自动换行

使用Java生成XML文件时,如何能让文件自动换行?