Как сделать окно в qt фиксированного размера

Добавил пользователь Владимир З.
Обновлено: 12.09.2024

Вы можете заказать у нас

VPS (Virtual Private Server, виртуальный выделенный сервер, другое название VDS — Virtual Dedicated Server) — стартовая площадка для крупных проектов, позволяющая более рационально использовать представляемые ресурсы в рамках выбранного тарифа OpenVZ-сервера. OpenVZ — технология виртуализации c общим ядром основной операционной системы без эмуляции отдельного физического сервера. Предлагает меньшую стоимость за счёт низких накладных расходов на виртуализацию. KVM — аппаратная виртуализация, при которой полностью эмулируется физический сервер, что позволяет устанавливать любые операционные системы (Linux, Windows, FreeBSD и другие) и дает гарантированные ресурсы физического сервера. Для всех серверов предоставляется надежная DDOS-защита.

Средства Qt позволяют автоматически оптимизировать интерфейс программы для любого разрешения монитора или изменения размера окна. Сделать это можна с помощью Qt layout.

При добавлении компонентов обычным методом (перетягиванием компонента в дизайнере форм) он имеет фиксированый размер. Это может вызвать нежелательные артефакты при изменении размеров окна. Если же разместить компонент на Qt layout, размер компонента будет автоматически подстраиваться под окно пользователя. Qt layout бывает нескольких видов, в зависимости от нужд пользователя и желания феншуйности интерфейса.

Чтобы начать использовать Qt layout, нужно в Form Designer добавить необходимый layout (см. рис. выше), потом разместить туда необходимые компоненты.

layout components

Можно разместить неслолько Qt layout на форме в зависимости от нужд.

Дальше, для автоматического изменения размера Qt layout 'ов при изменении размера окна необходимо скомпонировать форму:

qt form

Можно неограничено вкладывать Qt layout'ы друг в друга. Если необходимо сохранить размер отдельно компонента, можна разместить его внутри отдельного Qt Widget, вложеного в Qt layout.

В процессе размещения визуальные элементы и компоновки "договариваются" о размерах и пропорциях в окне. Компоновщики придают размещению структурированный вид: будут ли элементы размещены в ряд (вертикально или горизонтально) либо в сетке. В свою очередь каждый из виджетов предоставляет собственные политики размера: какое пространство будет занимать каждый визуальный элемент в ширину и высоту, минимальный и максимальный размер для каждого из них.

Политики размера задают вызовом метода setSizePolicy() класса QWidget . Метод принимает значение для горизонтальной и вертикальной политики изменения размера. Метод sizeHint() возвращает оптимальный размер (класс QSize ), который был определён для виджета. Ниже приведены возможные значения настройки политик размера:

  • QSizePolicy::Fixed — sizeHint определяет размеры элемента. Размеры элемента фиксированы;
  • QSizePolicy::Minimum — sizeHint определяет минимально возможные размеры;
  • QSizePolicy::Maximum — sizeHint определяет максимально возможные размеры;
  • QSizePolicy::Preferred — sizeHint определяет рекомендованные размеры для элемента;
  • QSizePolicy::Expanding — так же как Preferred с тенденцией к увеличению размера;
  • QSizePolicy::MinimumExpanding — так же как Minimum с тенденцией к увеличению размера;
  • QSizePolicy::Ignored — sizeHint будет игнорирован, элемент должен занимать столько места на форме, сколько возможно.

В предыдущем примере кнопки имеют фиксированный вертикальный размер. Для того, чтобы размеры кнопок менялись как горизонтально так и вертикально, добавим настройки политик размера метода createWidgets() .

Также размеры виджета можно жёстко ограничивать с помощью методов setMaximumSize() (контролирует максимальный размер элемента интерфейса) и setMinimumSize() (контролирует минимальный размер). В качестве параметра они принимают объект класса QSize , содержащий размеры элемента. Для удобства можно использовать также методы setMinimumWidth(), setMinimumHeight(), setMaximumWidth(), setMaximumHeight() для задания минимальной ширины и высоты, а также максимальной ширины и высоты. Зададим фиксированный вертикальный размер для визуального элемента lcdNumber :

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

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

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

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

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

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

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

Это сводит с ума. Назначение макета центральному виджету должно быть самой тривиальной операцией в Qt Creator. Вместо этого требуется объединение этого весьма неинтуитивное решения с Jens ' одинаково неинтуитивным решением ( в таком порядке ). Хотя автоматизация, обеспечиваемая Qt Creator, по-прежнему значительно превосходит повторяющийся шаблон, взлом его ужасающего пользовательского опыта (UX) заставил меня по-новому подергивать глаза.

@Cecil Curry, даже после этого решения, мне потребовалось 20 минут, чтобы понять, что я должен . потому что centralWidget только в том случае, когда нет опции контекстного меню для добавления макета . только микроскопическая кнопка на панели инструментов, которая выглядит почти как неактивная

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

Читайте также: