【发布时间】:2014-01-27 05:44:55
【问题描述】:
我已将 QLabel 小部件添加到我的 QTreeWidget 以解决 QTreeWidget 中的自动换行问题。 (见how to word wrap a QTreeWidgetItem)。 QLabel 小部件似乎在文本周围有间距,由于某种原因,当文本换行时它会消失。标签文本为空白时也不会显示。
我尝试在 QLabel 上设置setContentsMargin(0,0,0,0),但没有奏效。我也试过 setStyleSheet("border: 0px; margin: 0px; padding: 0px;") 也没有帮助。
截图:
您可以看到,QT 是否决定在单词周围放置间距缓冲区取决于描述的长度。它仅在启用自动换行时发生。进一步玩耍似乎表明它依赖于描述字符串中的空格。字符串中没有空格可以防止单词周围出现额外的空格。可能与 QLabel 对其自动换行属性所做的事情有关。
# This code is Ruby because I'm using the qtbindings gem
tree = Qt::TreeWidget.new
tree.setColumnCount(2)
tree.setHeaderLabels(["Name", "Description"])
top_node = Qt::TreeWidgetItem.new(["top"])
top_node.setCheckState(0, Qt::Unchecked)
tree.addTopLevelItem(top_node)
desc_label = Qt::Label.new("description")
desc_label.setWordWrap(true) # Remove and it works
tree.setItemWidget(top_node, 1, desc_label)
node = Qt::TreeWidgetItem.new(["test1"])
node.setCheckState(0, Qt::Unchecked)
top_node.addChild(node)
desc_label = Qt::Label.new("description1 is long and very interesting")
desc_label.setWordWrap(true) # Remove and it works
tree.setItemWidget(node, 1, desc_label)
【问题讨论】:
-
你能把问题的截图贴出来吗?我刚刚尝试过,我没有看到文本周围有任何额外的边距。
-
另外,也提供一些重现问题的代码。
-
我添加了屏幕截图、代码,以及对正在发生的事情和原因的更好解释。
-
不要使用小部件,使用 Qt MVC。这个问题可以用自定义委托在 3 行代码中解决。
-
想详细说明 Dmitry 吗?
标签: qt qtreewidget qlabel qtreewidgetitem