我已将QLabel小部件添加到我的QTreeWidget以解决QTreeWidget中的自动换行问题。 (见how to word wrap a QTreeWidgetItem)。 QLabel小部件似乎在文本周围有间距,当文本换行时由于某种原因消失。当Label文本为空白时,它也不会显示。
我尝试在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)
答案 0 :(得分:1)
您看到的是布局逻辑对QLabel绘图/定位的影响(您可以在https://qt.gitorious.org/qt/qt/source/f7b3072924fb57b3979ff4d536eb213270be1047:src/gui/widgets/qlabel.cpp#sizeForWidth中看到这些例程,请参阅sizeForWidth()方法)。
您可能会做的是:
您可以通过尝试设置setTextFormat()并明确地将PlainText或RichText用于所有自定义项来更改行为。但它可能没有帮助。
我的建议是使用QItemDelegate或QStyledItemDelegate的子类,并重新实现sizeHint(const QStyleOptionViewItem& option,const QModelIndex& index),以便为您自定义项返回所需的大小和高度。然后使用setItemDelegate()进行查看。
答案 1 :(得分:0)
我的解决方法是设置标签的最小高度,如下所示:
desc_label.setMinimumHeight(desc_label.fontMetrics.height * 2)
这与Label自动对某些字符串进行匹配,并使用空白或单字符串防止不一致大小的标签。
答案 2 :(得分:0)
我通过设置固定高度或最大高度来解决问题:
label.setMaximumHeight(label.fontMetrics().height() * n);
或
label.setFixedHeight(label.fontMetrics().height() * n);
其中n是标签内容的最大考虑/估计行。
不幸的是,设置最小高度label.setMinimumHeight(...)
不起作用,否则它更合理,因为不清楚包装的文本可能有多少行。 label.setContentMargin(0,0,0,0)
也不起作用。