Как установить ширину QComboBox, чтобы она соответствовала самому большому элементу?

17

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

comboBox->addItem(someString);

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

Edit:

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

// 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);
    
задан Linoliumz 30.06.2010 в 19:31
источник
  • Кроме того, если вы хотите сохранить поле со списком того же размера, но раскройте ширину выпадающего списка, чтобы соответствовать самой длинной строке, вы можете установить минимальную ширину представления: ui-> sieveSizeComboBox-> view () -> setMinimumWidth (ширина); –  Matthew 09.04.2014 в 20:52

2 ответа

8

Qt (4.6) онлайн-документация имеет это сказать о QComboBox :

enum    SizeAdjustPolicy  { AdjustToContents, AdjustToContentsOnFirstShow, AdjustToMinimumContentsLength, AdjustToMinimumContentsLengthWithIcon }

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

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

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

ответ дан rubenvb 30.06.2010 в 20:18
  • Пожалуйста, дайте мне знать, как это сделать на Qt 3.3.6? –  shan 10.12.2012 в 12:42
6

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

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

Edit:

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

    
ответ дан Troubadour 30.06.2010 в 19:38
  • Спасибо, да QComboBox находится в QHBoxLayout. Я пробовал модифицировать SizeAdjustPolicy, но это не повлияло, я также попытался заполнить QComboBox, прежде чем вызывать ui-> setupUi (this); в конструкторе, но программа разбилась. QComboBox был создан с помощью Qt Creator, я не знаю, можно ли его заполнить до того, как он будет показан. –  Linoliumz 30.06.2010 в 20:03
  • Что вы установили как SizePolicy в combobox? –  Kaleb Pederson 30.06.2010 в 20:06
  • Имеет смысл, что попытка заполнить комбо перед вызовом ui-> setupUi (это) вызовет segfault, потому что объект QComboBox еще не был создан. Установите AdjustPolicy в QComboBox :: AdjustToContents. –  Casey 01.07.2010 в 20:53