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

Главный вопрос

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

Как я думаю, Qt работает

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

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

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

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

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

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

1 ответ

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

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

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

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

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

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


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

Другие вопросы по тегам