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

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

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

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

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


person bastibe    schedule 18.05.2011    source источник


Ответы (4)


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

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

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

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

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

person Jens    schedule 18.05.2011
comment
QtDesigner иногда может немного сбивать с толку. - person bastibe; 19.05.2011
comment
о, СПАСИБО за это! :-) Я смотрел на QtDesigner (ну, QtCreator, хотя там то же самое) в течение получаса и не мог понять, почему мой центральный виджет не изменяется до максимума - пока я не заметил, что крошечный маленький значок вы обведены в ваш ответ, отмечены красной пометкой "отключено". один щелчок по кнопке «расположить по вертикали» на панели инструментов создателя, и проблема устранена. Впервые я замечаю эту панель инструментов, кстати, ее легко не заметить ... - person ssc; 03.02.2012
comment
Чтобы прокомментировать ответ Йенса: на Mac щелкните виджет верхнего уровня (не обязательно с именем centralWidget), затем щелкните «Форма» в строке меню и выберите один из макетов. - person hnasarat; 08.08.2012
comment
Если кому-то все еще интересно, это делается в Windows в QT5.8 / QT Creator 4.2.1, щелкнув центральный виджет верхнего уровня (на котором есть небольшая красная отметка), а затем перейдя в Инструменты ›Редактор форм› Разложить по вертикали ( или по горизонтали). - person LeoR; 28.04.2017

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

person Jillian Beuschel Marohnic    schedule 11.01.2013
comment
Это сводит с ума. Назначение макета центральному виджету должно быть самой тривиальной операцией в Qt Creator. Вместо этого для этого требуется объединить это крайне неинтуитивное решение с Йенсом 'столь же неинтуитивное решение (именно в таком порядке). Хотя автоматизация, обеспечиваемая Qt Creator, по-прежнему значительно превосходит повторяющийся шаблон, взлом его ужасного пользовательского опыта (UX) заставил меня по-новому подергивать глаза. - person Cecil Curry; 15.06.2017
comment
@Cecil Curry, даже после этого решения, мне потребовалось 20 минут, чтобы понять, что я должен ... потому что centralWidget только в том случае, когда нет опции контекстного меню для добавления макета ... только микроскопическая кнопка на панели инструментов, которая выглядит почти как неактивная - person Swift - Friday Pie; 26.07.2017
comment
Пишу этот комментарий, так как даже после решений здесь у меня были проблемы с поиском варианта. Вам нужно выбрать центральный виджет, затем щелкнуть правой кнопкой мыши в свободном пространстве вашего приложения, перейти к «Макет» в открывшемся контекстном меню, а затем выбрать нужный макет. Это сработало для меня, по крайней мере (QT5, используя QT Designer 5.11.1). - person kushy; 28.08.2018

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

person KeyC0de    schedule 10.08.2018

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

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

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

person Linh Dao    schedule 12.05.2020