QT Designer - Как создать макет

Я новичок в QT, особенно в QT Designer, и мне он показался довольно неинтуитивным.

У меня есть следующий макет, который я пытаюсь реализовать в Qt Designer.

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

Объяснение:

  • ЖЕЛТЫЙ -> окно приложения
  • СИНИЙ -> 2 боковые кнопки с высотой красной высоты и белой высоты
  • КРАСНЫЙ -> должен быть около 2/3 высоты синего
  • БЕЛЫЙ -> также должен быть около 1/3 высоты синего.

Макеты:

  • КРАСНЫЕ -> Разложить по горизонтали
  • БЕЛЫЕ -> Разложить по горизонтали
  • КРАСНЫЕ + БЕЛЫЕ -> Вертикальное размещение
  • СИНИЙ + (КРАСНЫЙ + БЕЛЫЙ) -> Расположить по горизонтали
  • (СИНИЙ + (КРАСНЫЙ + БЕЛЫЙ)) + ПРОБКА -> Вертикальное размещение (поскольку между кнопками и верхней частью приложения должно быть некоторое пространство)

НО если я применю из тех, что я сказал выше, я получу что-то вроде этого:

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

Насколько я ищу, я могу использовать Расположить по горизонтали в Splitter и Расположить горизонтально по вертикали в Splitter, чтобы сохранить желаемое соотношение сторон, но тогда я могу разделить приложение, и я не хочу этого. Может ли кто-нибудь помочь мне понять, как я могу это сделать? Или единственный способ сделать это - с C++?


person Mircea    schedule 01.09.2020    source источник


Ответы (1)


Я думаю, что вы ищете QGridLayout.

В QGridLayout вы можете решить для каждого виджета, сколько строк он будет занимать (просто перетащите его границы) и различные веса (параметр называется rowStretch или columnStretch) каждой строки/столбца.

Пример: Ваш макет с QGridLayout Ваш макет может быть составлен следующим образом:

Большой желтый прямоугольник — это первый QGridLayout (1 строка x 5 столбцов), который содержит (слева направо):

  • Ваш первый синий элемент (занимает 1 строку и 1 столбец);
  • 3 QGridLayouts зеленого цвета;
  • Ваш второй синий элемент (занимает 1 строку и 1 столбец);

Зеленые QGridLayouts (2 строки x 2 столбца) настроены следующим образом:

  • Ваш красный элемент (занимает 1 строку и 2 столбца и имеет значение rowStretch, равное 2);
  • Ваш первый белый элемент (занимает 1 строку и 1 столбец и имеет значение rowStretch, равное 1);
  • Ваш второй белый элемент (занимает 1 строку и 1 столбец и имеет значение rowStretch, равное 1);

Таким образом, красные и белые элементы пропорциональны 2 к 1 по вертикали и (поскольку вместе они занимают тот же ряд, что и синие) высота синего равна сумме красного + белого.

person Simone Mariottini    schedule 01.09.2020