Установка текста в QLabel в макете не изменяет размер
Используя конструктор в создателе Qt, я создал диалоговое окно, содержащее различные виджеты в вертикальном макете. Одним из виджетов является QLabel со словом wrap, установленным в true. Текст для QLabel устанавливается непосредственно перед отображением диалога.
Максимальная ширина и высота QLabel равна 16777215, для политики вертикального размера установлено значение Расширение, а горизонтальное - Предпочтительно. Я попытался изменить политику размера.
Проблема заключается в том, что если текст большой, QLabel не может быть соответствующим образом скорректирован, а текст обрезается следующим образом: -
![enter image description here]()
Я попытался вызвать updateGeometry() для диалога после установки текста, а также попытался вызвать обновление по вертикальной компоновке, но ничего не имеет никакого значения. В идеале я хочу, чтобы QLabel настраивался вертикально для размещения текста.
Может ли кто-нибудь сказать мне, что мне здесь не хватает?
Ответы
Ответ 1
Установите вертикальную sizepolicy вашей метки на QSizePolicy::Minimum
.
Затем установите sizeconstraint вашего диалогового макета на QLayout::SetMinimumSize
.
Это должно привести к тому, что ваш диалог будет расти, поэтому весь контент поместится внутри него.
Что-то вроде этого:
QVBoxLayout *layout = new QVBoxLayout;
layout->setSizeConstraint(QLayout::SetMinimumSize);
this->setLayout(layout);
for(int i = 0; i < 5; i++)
{
QLabel *label = new QLabel;
label->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);
label->setWordWrap(true);
label->setText("This is a very long text. This is a very long text. This is a very long text. "
"This is a very long text. This is a very long text. This is a very long text. This is a very long text. "
"This is a very long text. This is a very long text.");
layout->addWidget(label);
}
Ответ 2
В моих экспериментах просто установить свойство layoutSizeConstraint
на SetMinimumSize
в макете, содержащей QLabel, должно быть достаточно, чтобы метка расширялась и настраивалась на ее содержимое.
Вы можете либо изменить это свойство в Qt Designer, если вы использовали его для создания пользовательского интерфейса или через код:
layout->setSizeConstraint(QLayout::SetMinimumSize);
Обратите внимание, что если у вас есть вложенные макеты, вам может потребоваться установить ограничение во всех макетах вверх по цепочке. Не требуется никаких изменений для метки sizePolicy
- значения по умолчанию (Preferred
для политики по горизонтали и по вертикали) должны работать, по крайней мере, в моем опыте.