我有一个自定义小部件,它具有 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 少,但对于它的 heightForWidth 量仍然足够。当它被调整大小时,它比它的 heightForWidth 量少 30,但比它的 sizeHint 多。
我已经检查过,大型 QLabel 的 hasHeightForWidth() 和 wordWrap() 值设置为 true。我究竟做错了什么?