Как правильно выбрать размер виджетов 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: см. Связанные вопросы: