我有一个启用了自动换行的自定义 QLabel。调整MyWidget的大小时,它会换行,但 sizeHint() 仍会返回原始高度。我尝试了这篇文章的修复:QLabel 在调整大小时切断文本,但标签的 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;
}