web-dev-qa-db-ja.com

最大のアイテムに合うようにQComboBoxの幅を設定するにはどうすればよいですか?

以下を使用してQComboBoxを入力するQStringがあります。

comboBox->addItem(someString);

GUIアプリケーションを起動すると、最小のアイテムがはるかに大きい場合でも、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);
23
Linoliumz

Qt(4.6)のオンラインドキュメントには、QComboBoxについて書かれています。

enum    SizeAdjustPolicy  { AdjustToContents, AdjustToContentsOnFirstShow, AdjustToMinimumContentsLength, AdjustToMinimumContentsLengthWithIcon }

私は提案します

  1. SizeAdjustPolicyが実際に使用されていることを確認する

  2. 列挙型をAdjustToContentsに設定します。あなたが言及するように.uiファイルDesignerでそれを行うことをお勧めします。通常、Designerで行うことに関して、コンストラクターには特別なことは何もありません。

12
rubenvb

docs によると、デフォルトのSizeAdjustPolicyAdjustToContentsOnFirstShowなので、おそらくそれを表示してからデータを入力していますか?

表示する前に最初にデータを入力するか、ポリシーをQComboBox::AdjustToContentsに設定してみてください。

編集:

ところで、私はあなたが適切なレイアウトでQComboBoxを持っていると仮定しています。 QHBoxLayout、サイズのヒント/ポリシーが実際に使用されているようにします。

6
Troubadour

コンボボックス自体のサイズを変更せずに、コンボボックスのドロップダウンメニューのサイズを最大のテキストに合わせて変更するだけの解決策を探していました。

あなたの提案(@Linoliumz)は私が解決策を見つけるのに役立ちました。ここにあります:cbと呼ばれるコンボボックスがあるとしましょう:

C++:

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

PyQT:

width = cb.minimumSizeHint().width()
cb.view().setMinimumWidth(width)
3
Dr ALOUI