Понимание механизмов разметки форм в Qt - PullRequest
58 голосов
/ 29 декабря 2010

Qt имеет гибкий и мощный механизм компоновки, позволяющий обрабатывать окна настольных приложений.

Но он настолько гибок, что его почти невозможно понять, когда что-то идет не так и требует точной настройки.И настолько мощный, что он может побить любого в своих попытках подавить мнение Qt о том, как должна выглядеть форма.

Итак, кто-нибудь может объяснить, или предоставить статьи, или источник механизмов позиционирования Qt?

Я пытаюсь заставить QLabel, QPushButton и QTableView, отмеченные подчеркиванием в их именах, быть в два раза выше, чем QTextBrowser с verticalStretch = 1 ниже.Как правильно обработать высоту виджета?

.ui файл моей формы на Google Docs.Поиск '____' в именах, предварительный просмотр в QtDesigner

Ответы [ 2 ]

116 голосов
/ 12 января 2011

Макеты на самом деле легко понять "я думаю":)
Простое объяснение раскладок можно найти в книге qt " Программирование на C ++ Gui с использованием QT 2nd edition "

Что вы должны знать о макетах и ​​их политиках размеров

  • Большинство виджетов Qt имеют политику размера. Эта политика размеров сообщает системе, как виджет должен растягиваться или уменьшаться. Его получили из класса QSizePolicy. Политика размеров имеет как вертикальные, так и горизонтальные компоненты.
  • Большинство виджетов также имеют подсказку о размере. Этот размер подсказывает системе, какой виджет предпочитает размер
  • QSizePolicy имеет коэффициент растяжения, позволяющий виджетам расти с разной скоростью

Мне известны только 4 правила размера

  • политика фиксированного размера - размер виджета фиксирован и не может быть растянут. Остается на его размер подсказка.
  • политика минимального размера - подсказка о размере - это наименьший возможный размер виджета, но он МОЖЕТ ВСЕ ЕЩЕ увеличиваться при необходимости.
  • Политика предпочтительного размера - виджет может уменьшаться или увеличиваться больше, чем подсказка о размере.
  • расширение политики размера - виджет может уменьшаться или увеличиваться больше, чем подсказка его размера:)

Вы можете спросить,

В чем разница между предпочтительным и расширяющимся?
answer: Представьте себе форму с двумя виджетами, один с предпочтительным, а другой с расширяющимся. Тогда любое дополнительное пространство будет отдано виджету с политикой расширения. Виджет с предпочтительной политикой останется с подсказкой его размера.

Я рекомендую (ВНИМАНИЕ: я не эксперт :)) Вы покупаете и читаете" Программирование на C ++ Gui с использованием QT 2nd edition ". Я в настоящее время читаю это, и это имеет много смысла. Посмотрите на изображения и посмотрите, имеют ли они смысл.

Объясняя размер политики
Size policy explained

Простой пример
Это простой диалог с двумя кнопками, политики горизонтального и вертикального размера которого отображаются как горизонтальное и вертикальное растяжение.

example

Вот предварительный просмотр в его наименьшем размере. alt text

Вот еще один предварительный просмотр в большем размере alt text

[РЕДАКТИРОВАНИЕ: // добавлен пример подсказки по размеру]

ПОЧЕМУ ВАМ НЕОБХОДИМО ОБРАТИТЬСЯ К РАЗМЕРУ
Вы можете видеть, что у каждого виджета есть sizeHint, что жизненно важно, потому что система разметки QT всегда учитывает sizeHint. Это только проблема, если размер виджета по умолчанию не совсем то, что вы хотите. Единственный способ обойти эту проблему - расширить (подкласс) виджет и переопределить его функцию-член sizeHint (). Пример стоит 1000 слов. Чтобы сэкономить место, см. Мой блог, где приведен пример проекта.

0 голосов
/ 29 декабря 2010

Вы можете использовать таблицы стилей QT для простого и удобного управления высотой виджетов и другими свойствами.

http://doc.qt.io/archives/qt-4.7/stylesheet.html

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

http://doc.qt.io/archives/qt-4.7/designer-layouts.html

...