it-roy-ru.com

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

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

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

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

enter image description here

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

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

14
TheDarkKnight

Установите вертикальную политику размера вашей метки на 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
thuga

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

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

layout->setSizeConstraint(QLayout::SetMinimumSize);

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

1
waldyrious