Как заставить виджет Qt расти вместе с размером окна?

89

Я хочу иметь маленький, QFormLayoutкоторый растет, чтобы заполнить свой родительский виджет.

Я создал новый файл .ui, используя QWidgetшаблон в Qt Designer. Я помещаю QFormLayoutвнутрь этого «окна», а затем помещаю в него элементы управления QFormLayout.

Все это работает достаточно хорошо, но QFormLayoutвсегда остается в том размере, который я установил в Qt Designer. Я хотел бы, QFormLayoutчтобы он заполнил свой родительский виджет и увеличился / уменьшился вместе с ним.

Как я могу этого добиться?

Bastibe
источник

Ответы:

130

В Designer активируйте центральный виджет и назначьте макет, например горизонтальный или вертикальный. Тогда ваш QFormLayout автоматически изменит размер.

Изображение дизайнера

Всегда следите за тем, чтобы у всех виджетов был макет! В противном случае автоматическое изменение размера этого виджета не работает!

Смотрите также

Элементы управления в QtDesigner настаивают на том, что они слишком большие и не изменяют размер

Йенс
источник
13
QtDesigner иногда может немного сбивать с толку.
Bastibe
30
о, СПАСИБО за это! :-) Я смотрел на QtDesigner (ну, QtCreator, хотя там то же самое) в течение получаса и не мог понять, почему мой центральный виджет не изменяется до максимума - пока я не заметил, что крошечный маленький значок вы обведены в ваш ответ, отмечены красной пометкой "отключено". один щелчок по кнопке «Разложить по вертикали» на панели инструментов создателя, и проблема устранена. Впервые я замечаю эту панель инструментов, кстати, ее легко не заметить ...
ssc
8
Чтобы прокомментировать ответ Йенса: на Mac щелкните виджет верхнего уровня (не обязательно названный «centralWidget»), затем щелкните «Форма» в строке меню и выберите один из макетов.
hnasarat 08
2
Если кому-то еще интересно, это делается в Windows в QT5.8 / QT Creator 4.2.1, щелкнув на верхнем уровне «centralWidget» (на котором есть небольшая красная отметка), а затем перейдя в Инструменты> Редактор форм> Макет Вертикально (или горизонтально).
LeoR
41

Я обнаружил, что невозможно назначить макет центральному виджету, пока я не добавлю под ним хотя бы одного дочернего элемента. Затем я мог выделить крошечный значок с красной пометкой «отключено» и затем щелкнуть макет на панели инструментов конструктора вверху.

Джиллиан Бушель Марохник
источник
4
Это сводит с ума. Назначение макета центральному виджету должно быть самой тривиальной операцией в Qt Creator. Вместо этого требуется объединение этого весьма неинтуитивное решения с Jens ' одинаково неинтуитивным решением ( в таком порядке ). Хотя автоматизация, обеспечиваемая Qt Creator, по-прежнему значительно превосходит повторяющийся шаблон, взлом его ужасающего пользовательского опыта (UX) заставил меня по-новому подергивать глаза.
Сесил Карри
@Cecil Curry, даже после этого решения, мне потребовалось 20 минут, чтобы понять, что я должен ... потому что centralWidget только в том случае, когда нет опции контекстного меню для добавления макета ... только микроскопическая кнопка на панели инструментов, которая выглядит почти как неактивная
Swift - Friday Pie
3
Пишу этот комментарий, так как даже после решений здесь мне было трудно найти вариант. Вы должны выбрать центральный виджет, затем щелкнуть правой кнопкой мыши в свободном пространстве вашего приложения, перейти к «Макет» в открывшемся контекстном меню, а затем выбрать нужный макет. Это сработало для меня, по крайней мере (QT5, используя QT Designer 5.11.1).
kushy
11

Принятый ответ (его изображение) неверен, по крайней мере, сейчас в QT5. Вместо этого вы должны назначить макет корневому объекту / виджету (указывая на вышеупомянутое изображение, оно должно быть MainWindowвместо centralWidget). Также обратите внимание, что у вас должен быть QObjectсоздан хотя бы один под ним, чтобы это работало. Сделайте это, и ваш пользовательский интерфейс станет реагировать на изменение размера окна.

Никос
источник
0

Вам необходимо изменить тип макета по умолчанию для объекта QWidget верхнего уровня с типа макета «Разрыв» на другие типы макета (вертикальный макет, горизонтальный макет, макет сетки, макет формы). Например: введите описание изображения здесь

Примерно так:

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

Линь Дао
источник