QLabel在调整大小时截断文本

6
我有一个自定义小部件,整体布局为QVBoxLayout。它包含多个标签、一个QFormLayout、一个按钮和一个拉伸以消耗所有多余的空间。其中一个标签可能会很大,因此我正在努力确保没有任何奇怪的情况导致文本无法读取。该小部件包含在QScrollArea中,以确保如果用户缩小整个窗口,则仍然可以看到小部件的所有方面。
QLabel似乎能够很好地调整大小,但一旦宽度达到某一点,它就会截断标签底部的几行,并将空间分配给小部件底部的拉伸。
我在没有设计师的情况下完全使用代码完成这一切,因此很有可能我遗漏了一些东西。子组件按以下顺序添加到整体QVBoxLayout中:
OverallLayout = new QVBoxLayout(this);
Title         = new QLabel();
Description   = new QLabel();
SubRegion     = new QFormLayout();
Button        = new QButton();
...
// set text values, wordWrap(true), and Font for labels
OverallLayout->addWidget(Title);
OverallLayout->addWidget(Description);
OverallLayout->addLayout(SubRegion);
OverallLayout->addStrut(MIN_DIST);
OverallLayout->addWidget(Button);
OverallLayout->addStretch(STRETCH_FACTOR);

测试结果:通过检查QLabel的sizeHint()函数返回的结果,随着部件水平收缩,返回的值似乎没有改变。然而,QLabel确实会展开以占用更多的垂直空间(153相对于103的提示),只是不足以容纳所有文本。当QLabel首次显示时,它比其sizeHint少一些像素,但仍足够其hasHeightForWidth数量。当它被调整大小时,它比其hasHeightForWidth数量少30,但超过其sizeHint。
我已经检查了并且确定大的QLabel的hasHeightForWidth()和wordWrap()值为true。我做错了什么?

你能否添加代码片段,展示这些小部件是如何添加到布局中的?我认为你应该通过setMinimumHeight()方法设置QLabel的最小高度,以避免被截断。或者你可以为spacer元素设置一个最大高度值。 - fatma.ekici
我想到的一种修复方法是链接到resized方法,并将最小高度设置为描述标签的heightForWidth(width)值。虽然这种方法似乎有点笨拙,但我想知道让布局管理器正常工作的正确方法是什么。 - ElCraneo
但是关于使用 setMinimumHeight() 的建议呢? - jdi
我目前是通过拦截resizeEvent,计算新宽度的heightForWidth,然后执行setMinimumHeight()来实现这一点。然而,这似乎有些笨拙(如我之前的评论所述),我正在尝试找到Qt自己处理这个问题的方法。这是我的初始化中做错了什么,还是拦截resizeEvent真的是解决这个问题的最佳方式? - ElCraneo
1个回答

3

最终我采用了重写小部件的resizeEvent(QResizeEvent *evt)函数的方法,以便动态设置QLabel的最大值。

void MyWidget::resizeEvent (QResizeEvent *evt) {
   int newHeight = Description.heightForWidth(Description.width());
   Description.setMaximumHeight(newHeight);
   QWidget::resizeEvent(evt); 
   // Note: I'm not sure if this last step is necessary
}

有趣的一点是,如果您同时使用setMinimumHeight(newHeight)setMaximumHeight(newHeight),标签将在垂直方向上增长以适应文本内容,但当标签在水平方向上增长并且不需要额外的空间时,它将永远不会收缩。我的猜测是heightForWidth(int w)返回的值为小部件的minimumHeight和实际需要像素之间的最大值。奇怪的是,它似乎并不在意返回一个比当前maximumHeight更大的值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接