我有一个启用了自动换行的自定义QLabel。当调整大小时,它会自动换行,但sizeHint()仍然返回原始高度。
我尝试了这篇文章中的修复方法:QLabel cutting off text on resize,但标签的sizeHint()仍然返回初始高度,并导致文本被截断。
为了使TestLabel返回正确的sizeHint(),我需要做什么?
为了使TestLabel返回正确的sizeHint(),我需要做什么?
MyWidget::MyWidget(QWidget *parent)
: QFrame(parent)
{
label = new TestLabel(this);
label ->setWordWrap(true);
label ->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
mLayout->addWidget(label);
}
void MyWidget::resizeEvent( QResizeEvent * event )
{
int height = label->heightForWidth(label->width());
label->setMaximumHeight(height);
//label->setMinimumHeight(height); // gets called all the time
label->updateGeometry();
QFrame::resizeEvent(event);
}
TestLabel类的sizeHint()函数:
QSize TestLabel::sizeHint() const
{
QSize s = QLabel::sizeHint();
qDebug() << "sizeHint(): " << text() << ": " << s;
return s;
}
QSize TestLabel::minimumSizeHint() const
{
QSize s = QLabel::sizeHint();
qDebug() << "minimumSizeHint(): " << text() << ": " << s;
return s;
}
sizeHint()
是指示布局系统的指标,表示小部件希望使用多少空间,如果它拥有全世界的所有空间。启用或禁用换行对此没有影响,它只会在QLabel
未获得其请求的布局大小时更改其行为。 - Chris