2016-07-14 2 views
3

Главного ВопросКак правильно разместить виджеты Qt?

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

Как Подумай Qt работает

После прочтения документации Qt кажется, что алгоритм калибровки выходит что-то вроде этого ... начинается макет, попросив своих детей для их идеального размера через QWidget :: sizeHint метод. Если макет имеет дополнительное пространство или недостаточно места, то он определит, какие виджеты будут изменяться в зависимости от политики размера виджета (QWidget :: sizePolicy), минимального размера (QWidget :: minimumSize) и максимального размера (QWidget :: maximumSize) ,

Почему нет метода QWidget :: setSizeHint?

Если мое понимание близко к тому, чтобы быть точным, казалось бы, все, что вам нужно сделать, это установить размерHint, sizePolicy, maximumSize и minimumSize для каждого виджета, и все будет работать. Так почему же нет метода setSizeHint?!?! ?? !! Конечно, каждый раз, когда вы используете виджет, который предоставляет всю необходимую вам функциональность (QTableView, QComboBox и т. Д.), Вы можете расширить его и переопределить один метод, но это звучит совершенно нелепо.

Один из вопросов, связанных с калибровкой, с которыми я воюю.

У меня есть QMainWindow с QDockWidget с левой стороны. QDockWidget имеет QTableView. Я бы хотел, чтобы QDockWidget/QTableView занимал «разумное» количество места при запуске, а затем пользователь мог изменять его размер, хотя бы маленький или большой, который им бы хотелось.

К сожалению, при запуске приложения он предоставляет QDockWidget/QTableView так мало места, что для него требуется горизонтальная полоса прокрутки. Единственный способ, которым я заставил его дать ему разумную величину ширины, - установить минимальную ширину QDockWidget, но затем он не позволяет пользователю изменять его размер настолько, насколько это возможно.

+0

Вы задали много вопросов (и разглагольствовал немного). Каков ваш реальный вопрос здесь? –

+0

Что такое «правильный» способ предоставить размер ваших виджетов по умолчанию и убедиться, что они сжимаются, расширяются или остаются фиксированными, если для их размещения требуется дополнительное пространство или недостаточно? ... особенно в моем случае, когда размер по умолчанию находится между минимумом и максимумом, или вы вообще не хотите использовать min/max. –

+0

Подумайте о том, чтобы вырезать часть постороннего материала в своем посте и сосредоточиться на самом вопросе. –

ответ

1

Почему нет метода QWidget :: setSizeHint?

На мой взгляд, это намного лучше для виджета, чтобы вычислить его предпочтительный размер на основе его содержания (или правила), вместо того, чтобы позволить кодировщик положить а sizeHint вероятно зашиты или, по крайней мере, склонны к ошибкам.

Мне почти никогда не приходилось устанавливать размер на виджет, играя с QSizePolicy было достаточно. И когда мне нужны были определенные ограничения, игры с минимальными/максимальными размерами было достаточно. Так что макеты Qt всегда могли адаптировать виджет.

Если вы хотите настроить себя в процентах на размеры и т. Д., Вы можете играть с параметром stretch. Вы также можете добавить spacers, когда вам нужны пустые места.

Расширение QWidget для переопределения метода QWidget::sizeHint не смешно для меня, так как вы меняете поведение виджета, изменяя его предпочтительный размер и который соответствует духу полиморфизма OOD.

Как правильно разместить виджеты Qt? - неопределенный вопрос и зависит от вариантов использования. В большинстве случаев выбор хороших макетов и политики размеров позволяет достичь очень адаптивного графического интерфейса. Qt Designer может помочь сделать это правильно, даже если управление макетами не всегда интуитивно понятное (сначала вам нужно поместить свои виджеты, а затем установить их в макетах из внутреннего в внешний макет).


О конкретных проблемах, это трудно сказать, почему ваш QDockWidget становится слишком мал, не зная детали макета (ы) у вас есть вокруг двух виджетов в окне. Может быть, это конкретный вопрос с QDockWidget: см вопросы, связанные с:

Смежные вопросы