Как настроить ширину QComboBox, чтобы она подходила для самого большого элемента? - PullRequest
22 голосов
/ 30 июня 2010

У меня есть QComboBox, который я заполняю QString, используя:

comboBox->addItem(someString);

Когда я запускаю приложение с графическим интерфейсом, ширина QComboBox всегда равна 70, даже если самый маленький элемент намного больше. Как я могу динамически установить ширину QComboBox, например, наибольшую QString в пределах comboBox?

Изменить:

После некоторого дальнейшего тестирования я нашел следующее решение:

// get the minimum width that fits the largest item.
int width = ui->sieveSizeComboBox->minimumSizeHint().width();
// set the ComboBoxe to that width.
ui->sieveSizeComboBox->setMinimumWidth(width);

Ответы [ 3 ]

11 голосов
/ 30 июня 2010

В Qt (4.6) есть документация о QComboBox:

.
enum    SizeAdjustPolicy  { AdjustToContents, AdjustToContentsOnFirstShow, AdjustToMinimumContentsLength, AdjustToMinimumContentsLengthWithIcon }

Я бы предложил

  1. обеспечение фактического использования SizeAdjustPolicy

  2. установка перечисления на AdjustToContents. Поскольку вы упоминаете файл .ui, я предлагаю сделать это в Designer. Обычно в конструкторе не должно быть ничего необычного в том, что вы делаете в Designer.

6 голосов
/ 30 июня 2010

Согласно документам по умолчанию SizeAdjustPolicy равно AdjustToContentsOnFirstShow, так что, возможно, вы показываете его, а затем заполняете?

Либо заполните его, прежде чем показывать, либо попробуйте установить политику на QComboBox::AdjustToContents.

Edit:

Кстати, я предполагаю, что у вас есть QComboBox в подходящей раскладке, например. QHBoxLayout, так что подсказка / политика размера фактически используется.

2 голосов
/ 02 января 2019

Я искал решение, позволяющее изменить только размер выпадающего меню комбинированного списка, чтобы он соответствовал самому большому тексту, без изменения размера самого комбинированного списка.

Ваше предложение (@Linoliumz) помогло мне найти решение. Вот : Предположим, у вас есть поле со списком cb:

C ++:

width = cb->minimumSizeHint().width()
cb->view().setMinimumWidth(width)

PyQT:

width = cb.minimumSizeHint().width()
cb.view().setMinimumWidth(width)
...