Як змусити віджет Qt рости відповідно до розміру вікна?


89

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

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

Все це працює досить добре, але QFormLayoutзавжди залишається на розмірі, який я встановив у Qt Designer. Я хотів би, QFormLayoutщоб він заповнив батьківський віджет і зростав / зменшився разом з ним.

Як я можу це зробити?

Відповіді:


130

У конструкторі активуйте centralWidget і призначте макет, наприклад горизонтальний або вертикальний макет. Тоді розмір вашого QFormLayout автоматично зміниться.

Образ дизайнера

Завжди переконайтеся, що всі віджети мають макет! В іншому випадку автоматична зміна розміру порушить роботу з цим віджетом!

Дивіться також

Елементи керування наполягають на тому, щоб бути занадто великим і не буде змінювати розмір у QtDesigner


13
QtDesigner часом може трохи заплутати.
bastibe

30
о, ДЯКУЄМО за це! :-) я півгодини дивився на QtDesigner (ну, QtCreator, все те ж саме), і не міг зрозуміти, чому мій центральний віджет не змінює максимум - поки я не помітив, що крихітна маленька піктограма обведені у вашій відповіді червоною позначкою "вимкнено". один клік на кнопку «розкласти вертикально» на панелі інструментів творця, і проблема вирішена. Вперше я помітив, що панель інструментів BTW, яку легко пропустити ...
ssc

8
Щоб прокоментувати відповідь Jens: На Mac натисніть на віджет верхнього рівня (не обов’язково з назвою „centralWidget“), потім натисніть на „Form“ у рядку меню та виберіть один із макетів.
hnasarat

2
Якщо хтось все ще цікавиться, це робиться в Windows у QT5.8 / QT Creator 4.2.1, клацнувши на верхньому рівні "centralWidget" (на якому є маленька червона позначка), а потім перейшовши до Tools> Editor Form> Layout По вертикалі (або по горизонталі).
LeoR

41

Я виявив, що неможливо призначити макет центральному віджету, поки я не додав під нього хоча б одну дочірню сторінку. Тоді я міг виділити крихітну піктограму червоною позначкою "вимкнено", а потім натиснути на макет на панелі інструментів "Дизайнер" вгорі.


4
Це божевільне. Призначення макета центральному віджету має бути найтривіальнішою операцією в Qt Creator. Натомість для цього потрібно поєднувати це вкрай неінтуїтивне рішення з не менш інтуїтивним рішенням Єнса ( у точному порядку ). Хоча автоматизація, яку забезпечує Qt Creator, все ще з великим відривом відбиває повторювані шаблони, хакерство навколо її жахливого користувацького досвіду (UX) викликало у мене нове потрясіння.
Сесіл Каррі

@Cecil Curry навіть після цього рішення у мене пішло 20 хвилин, щоб зрозуміти, що я повинен ... тому що centralWidget лише в тому випадку, коли немає опції контекстного меню для додавання макета ... лише мікроскопічна кнопка на панелі інструментів, яка виглядає майже як неактивна
Свіфт - П’ятничний пиріг

3
Написавши цей коментар, оскільки навіть після вирішення тут, у мене були проблеми з пошуком варіанту. Ви повинні вибрати centralWidget, потім клацнути правою кнопкою миші на якомусь вільному просторі вашого додатка, перейти до «Layout» у контекстному меню, що відкрилося, а потім вибрати потрібний макет. Це принаймні для мене працювало (QT5, використовуючи QT Designer 5.11.1).
kushy

11

Прийнята відповідь (її зображення) є неправильною, принаймні зараз у QT5. Натомість слід призначити макет кореневому об’єкту / віджету (вказуючи на вищезгадане зображення, це має бути MainWindowзамість centralWidget). Також зверніть увагу, що ви повинні мати принаймні один QObjectстворений під ним, щоб це працювало. Зробіть це, і ваш інтерфейс стане чутливим до зміни розміру вікна.


0

Вам потрібно змінити тип макета за замовчуванням для об’єкта QWidget верхнього рівня з типу макета Break на інші типи макета (вертикальний макет, горизонтальний макет, макет сітки, макет форми). Наприклад: введіть тут опис зображення

До приблизно такого:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.