开发者

How do I set the QComboBox width to fit the largest item?

开发者 https://www.devze.com 2023-01-05 19:14 出处:网络
I have a QComboBox that I fill with QString using: comboBox->addItem(someString); When I start my GUI application the width of the QComboBox is always 70, even if the smallest item is much large

I have a QComboBox that I fill with QString using:

comboBox->addItem(someString);

When I start my GUI application the width of the QComboBox is always 70, even if the smallest item is much larger. How can I dynamically set the width of a QComboBox, for instance, to the largest QString within the comboBox?

Edit:

After some further testing I found the following solution:

// get the minimum width that fits the largest item.
int width = ui->sieveSizeComboBox->minimumSizeHint().width();
// set the ComboBoxe to that width.
ui->s开发者_运维百科ieveSizeComboBox->setMinimumWidth(width);


Qt (4.6) online documentation has this to say about QComboBox:

enum    SizeAdjustPolicy  { AdjustToContents, AdjustToContentsOnFirstShow, AdjustToMinimumContentsLength, AdjustToMinimumContentsLengthWithIcon }

I would suggest

  1. ensuring the SizeAdjustPolicy is actually being used

  2. setting the enum to AdjustToContents. As you mention a .ui file I suggest doing that in Designer. Normally there shouldn't be anything fancy in your constructor at all concerning things you do in Designer.


According to the docs the default SizeAdjustPolicy is AdjustToContentsOnFirstShow so perhaps you are showing it and then populating it?

Either populate it first before showing it or try setting the policy to QComboBox::AdjustToContents.

Edit:

BTW I'm assuming that you have the QComboBox in a suitable layout, eg. QHBoxLayout, so that the size hint/policy is actually being used.


I was searching for a solution to only change the size of the dropdown menu of the combobox to fit the largest text without changing the size of the combobox itself.

Your suggestion (@Linoliumz) did help me find the solution. Here it is : Suppose you have a combobox called cb:

C++:

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

PyQT :

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

精彩评论

暂无评论...
验证码 换一张
取 消