繁体   English   中英

QLabel在调整大小时切断文本

[英]QLabel cutting off text on resize

我有一个自定义小部件,其总体布局为QVBoxLayout。 它包含几个标签,一个QFormLayout,一个按钮,以及一个吃掉所有多余空间的伸展。 其中一个标签可能非常大,所以我试图确保没有文本不可读的奇怪情况。 小部件包含在QScrollArea中,以确保如果用户缩小整个窗口,仍然可以看到小部件的所有方面。

QLabel似乎调整得很好,但是一旦达到某个狭窄点,它就会切断标签底部的几行,并将空间分配给小部件底部的拉伸。

我在没有Designer的代码中完成所有操作,所以我完全有可能错过了一些东西。 子组件按以下顺序添加到整个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。 我究竟做错了什么?

我最终使用覆盖小部件的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)返回widget的minimumHeight和实际需要的像素之间的最大值。 奇怪的是,它似乎并不关心返回大于当前maximumHeight的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM