Как я могу переопределить минимальный размер QComboBox в Qt Designer?

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

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

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


person Matthew Read    schedule 02.02.2012    source источник


Ответы (2)


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

person Matthew Read    schedule 02.02.2012

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

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

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

  • QWidget::minimumSize не установлен по умолчанию. Когда это так, оно преобладает над QWidget::minimumSizeHint
  • QWidget::minimumSizeHint недействителен, если виджет не находится в макете (это означает, что его размер можно изменить до 0 с помощью мыши), в противном случае используйте виджет, определенный макетом.
  • QLayout::SizeConstraint содержит поведение макета по умолчанию для виджетов, которыми он *напрямую* управляет. Если вы вложите макет A в макет B, все виджеты, добавленные в A, будут использовать его свойство. Кроме того, если виджет W в B определяет свой собственный макет, то ограничения этого макета применяются к виджету W.
person UmNyobe    schedule 02.02.2012
comment
Похоже, вы обычно советуете не редактировать файл .ui напрямую, что хорошо, но как это отвечает на вопрос? - person Matthew Read; 02.02.2012
comment
вы ответили сами себе, поэтому я не стал добавлять информацию с 0 энтропией. - person UmNyobe; 02.02.2012
comment
Не уверен, что вы подразумеваете под энтропией, но спасибо за добавление дополнительной информации. Я попытался установить только минимальный размер, и это сработало - он начинается с правильного размера, но масштабируется быстрее, чем кнопки, поэтому он выглядит правильно только при минимальном размере. Вы знаете, почему это происходит? - person Matthew Read; 02.02.2012