【问题标题】:How to word wrap a QTreeWidgetItem如何自动换行 QTreeWidgetItem
【发布时间】:2011-01-23 02:57:59
【问题描述】:

我必须用可能太长而无法放入一行的项目(或项目的子项)填充 QTreeWidget,因此我正在寻找一种自动换行它们的方法。

我想

myQTreeWidget.setWordWrap(True)

(通过 QtDesigner4 完成)本来可以完成这项工作,但情况似乎并非如此。

我不知道这是否相关,但树被封装在拆分器框架中,因此包装应该是动态的,以允许调整拆分器的大小。

有什么想法吗?我使用 PyQt4,但任何语言/绑定的提示都将不胜感激。

【问题讨论】:

    标签: qt4 pyqt


    【解决方案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 上遇到了间距问题:stackoverflow.com/questions/21007272/…
    • 您还可以实现自定义委托来执行此操作:stackoverflow.com/questions/34623036/…
    • 请注意,这对我有用,但我遇到了崩溃。根据这个问题,您需要为父级设置标签或保留对它的引用:stackoverflow.com/questions/27644304/…。我选择了保留参考版本:self.label = QLabel('Long text here')。 (我使用的是 PySide 1.2.0 版)
    猜你喜欢
    • 2020-09-27
    • 1970-01-01
    • 2020-02-15
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多