У меня есть пользовательский QLabel с включенным wordwrap. При изменении размера MyWidget, он обертывает, но sizeHint() по-прежнему возвращает исходную высоту. Я испробовал исправление из этого сообщения: QLabel cutting off text on resize, но метка размераHint() по-прежнему возвращает начальную высоту и приводит к обрезанию текста.qlabel имеет неправильный размерHint(), когда включена функция wordwrap.
Что мне нужно сделать, чтобы вернуть TestLabel правильный размерHint()?
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;
}
'sizeHint()' является индикатором системы компоновки относительно того, сколько пространства виджет хотел бы использовать, если бы у него было все пространство в мире. Независимо от того, включен ли перенос слов, это просто изменяет поведение 'QLabel', когда он не получает размер, на который он« запрашивал »макет. – Chris