gpt4 book ai didi

qt - 启用自动换行时,qlabel 的 sizeHint() 错误

转载 作者:行者123 更新时间:2023-12-04 16:46:56 26 4
gpt4 key购买 nike

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

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;
}

最佳答案

一旦我遇到 QLabel 大小提示的问题 - 在 QLabel 文本更改后它没有更新,并且我在文本更改后立即需要它(使用字体度量获取文本宽度不会给出 future 标签的像素精确大小)。有一个技巧对我有帮助 - 我为包含该标签的布局层次结构中的所有布局调用了 invalidate() 和 activate() - 从最里面到最外面(完全按照这个顺序)。之后,对标签的 sizeHint() 的调用返回了新的正确的。我记得这两个功能之一就足够了,但我不记得是哪一个。如果你看过他们的代码,布局在 Qt 中是相当困惑的部分。

关于qt - 启用自动换行时,qlabel 的 sizeHint() 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15887672/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com