Используя конструктор в Qt creator, я создал диалог, который содержит различные виджеты в вертикальной компоновке. Одним из виджетов является QLabel с переносом слов, установленным в true. Текст для QLabel устанавливается непосредственно перед отображением диалога.
Максимальная ширина и высота QLabel — 16777215, для политики размера по вертикали — расширяющийся и горизонтальный Предпочтительные. Я пытался изменить изменение политики размера.
У меня проблема в том, что если текст большой, QLabel не может быть соответствующим образом откорректирован, и текст обрезается, например так:
Я попытался вызвать updateGeometry () для диалогового окна после установки текста, а также попытался вызвать update для вертикальной компоновки, но, похоже, ничего не изменилось. В идеале я хочу, чтобы QLabel корректировался по вертикали, чтобы вместить текст.
Может кто-нибудь сказать мне, что мне здесь не хватает?
Установите вертикальный размер вашего ярлыка на 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);
}
В моих экспериментах, просто установив layoutSizeConstraint
собственность на SetMinimumSize
на макете, который содержит QLabel, должно быть достаточно, чтобы позволить метке расширяться и подстраиваться под ее содержимое.
Вы можете изменить это свойство в Qt Designer, если вы использовали его для создания своего пользовательского интерфейса, или с помощью кода:
layout->setSizeConstraint(QLayout::SetMinimumSize);
Обратите внимание, что если у вас есть вложенные макеты, вам может потребоваться установить ограничение во всех макетах в цепочке. Никаких изменений в собственном лейбле sizePolicy
нужен — по умолчанию (Preferred
как для горизонтального, так и для вертикального размера) должна работать, по крайней мере, по моему опыту.