Установка текста на QLabel в макете, не изменяет размер

Используя конструктор в Qt creator, я создал диалог, который содержит различные виджеты в вертикальной компоновке. Одним из виджетов является QLabel с переносом слов, установленным в true. Текст для QLabel устанавливается непосредственно перед отображением диалога.

Максимальная ширина и высота QLabel — 16777215, для политики размера по вертикали — расширяющийся и горизонтальный Предпочтительные. Я пытался изменить изменение политики размера.

У меня проблема в том, что если текст большой, QLabel не может быть соответствующим образом откорректирован, и текст обрезается, например так:

введите описание изображения здесь

Я попытался вызвать updateGeometry () для диалогового окна после установки текста, а также попытался вызвать update для вертикальной компоновки, но, похоже, ничего не изменилось. В идеале я хочу, чтобы QLabel корректировался по вертикали, чтобы вместить текст.

Может кто-нибудь сказать мне, что мне здесь не хватает?

14

Решение

Установите вертикальный размер вашего ярлыка на QSizePolicy::Minimum,
Затем установите ограничение размера макета вашего диалога на 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);
}
17

Другие решения

В моих экспериментах, просто установив layoutSizeConstraint собственность на SetMinimumSize на макете, который содержит QLabel, должно быть достаточно, чтобы позволить метке расширяться и подстраиваться под ее содержимое.

Вы можете изменить это свойство в Qt Designer, если вы использовали его для создания своего пользовательского интерфейса, или с помощью кода:

layout->setSizeConstraint(QLayout::SetMinimumSize);

Обратите внимание, что если у вас есть вложенные макеты, вам может потребоваться установить ограничение во всех макетах в цепочке. Никаких изменений в собственном лейбле sizePolicy нужен — по умолчанию (Preferred как для горизонтального, так и для вертикального размера) должна работать, по крайней мере, по моему опыту.

1

По вопросам рекламы [email protected]