Как я могу переопределить минимальный размер QComboBox в Qt Designer? - PullRequest
1 голос
/ 02 февраля 2012

У меня есть диалог, содержащий QGridLayout с тремя столбцами. Одна из строк содержит QComboBox, QPushbutton и другую QPushButton в каждом столбце соответственно. Я хочу, чтобы каждый столбец был одинакового размера и одинакового масштаба.

К сожалению, QComboBox устанавливает подсказку по размеру слишком большой, чтобы быть достаточно большой, чтобы вместить самый широкий элемент. Похоже, что нет SizeAdjustPolicy , называемого «DoNotAdjustAndStopBeingAnnoying» или подобного, поэтому я не уверен, что можно настроить что-либо, чтобы заставить его прекратить выполнять эту настройку.

Я знаю, что могу довольно легко сделать это в коде, но я бы предпочел сохранить такие подробности в файле .ui. Есть ли способ сделать это в Qt 4.8 без написания кода?

Ответы [ 2 ]

3 голосов
/ 02 февраля 2012

Мне удалось решить эту проблему, установив горизонтальный компонент sizePolicy для поля со списком на Ignored. Это привело к тому, что поле со списком стало сокращаться дальше, чем кнопки, поэтому я изменил их, чтобы они также использовали Ignored и установил горизонтальный minimumSize для всех 3 элементов управления. Теперь все они начинаются с одинакового размера и имеют одинаковый размер вверх и вниз с остановкой на соответствующем минимуме.

1 голос
/ 02 февраля 2012

Не переопределяйте его в файле пользовательского интерфейса.Переопределите его с помощью Qt Designer, на панели свойств или в коде, когда вы создаете объект с прямым доступом к пользовательскому интерфейсу.

РЕДАКТИРОВАТЬ: В любом случае это может быть полезно

Существует иерархия между QLayout :: SizeConstraint , QWidget :: minimalSizeHint , QWidget:: минимальный размер , и вы можете найти его в документации.

  • QWidget::minimumSize не установлен по умолчанию.Когда это так, он превалирует над QWidget::minimumSizeHint
  • QWidget::minimumSizeHint недопустимым, если виджет не находится в макете (это означает, что он может быть изменен до 0 с помощью мыши), в противном случае используйте тот, который определенlayout.
  • QLayout::SizeConstraint содержит поведение макета по умолчанию для виджетов, которыми он * напрямую * управляет.Если вы вложите макет A в макет B, все виджеты, добавленные в A, будут использовать его свойство.Кроме того, если виджет W в B определяет свой собственный макет, то это ограничения макета применяются для виджета W.
.
...