我有一个自定义的QLabel,启用了字包装。调整MyWidget大小时,它会包装,但sizeHint()仍然返回原始高度。我尝试了这个post:QLabel cutting off text on resize的修复,但是标签的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);
}sizeHint()类的TestLabel:
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;
}发布于 2013-08-21 14:22:46
一旦我遇到了QLabel大小提示的问题--在QLabel文本被更改之后它没有被更新,并且在文本被更改后我立即需要它(使用字体度量来获取文本宽度并不会给出未来标签的像素精确大小)。有一个技巧帮了我--我为包含该标签的布局层次结构中的所有布局调用了called ()和activate() --从内部到最外层(完全按照这个顺序)。之后,对标签的sizeHint()的调用将返回新的和正确的调用。我记得这两个函数中的一个就够了,但我不记得是哪个函数。布局在Qt中是相当混乱的部分,如果你见过他们的代码的话。
https://stackoverflow.com/questions/15887672
复制相似问题