2010-06-30 3 views
17

J'ai un QComboBox que je remplis avec l'aide QString:Comment définir la largeur de QComboBox pour qu'elle corresponde à l'élément le plus important?

comboBox->addItem(someString); 

Quand je commence mon application GUI la largeur de la comboBox est toujours 70, même si le plus petit élément est beaucoup plus grande. Comment puis-je définir dynamiquement la largeur d'un QComboBox, par exemple, à la plus grande QString dans la comboBox?

Edit:

Après quelques tests supplémentaires, j'ai trouvé la solution suivante:

// 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); 
+0

Aussi, si vous voulez garder la zone de liste déroulante de la même taille, mais aussi d'élargir la largeur de menu déroulant pour adapter à la plus longue chaîne, vous pouvez définir la largeur minimale de la vue: vue 'UI-> sieveSizeComboBox-> () -> setMinimumWidth (width); ' – Matthew

Répondre

6

Selon le docs la valeur par défaut est SizeAdjustPolicyAdjustToContentsOnFirstShow donc peut-être que vous le montrer et le peuplant? Remplissez-le d'abord avant de l'afficher ou essayez de définir la stratégie sur QComboBox::AdjustToContents.

Edit:

BTW Je suppose que vous avez le QComboBox dans une mise en page appropriée, par exemple. QHBoxLayout, de sorte que l'indicateur de taille/politique est réellement utilisé.

+0

Merci, oui le QComboBox est dans un QHBoxLayout. J'ai essayé de modifier la SizeAdjustPolicy mais cela n'a eu aucun effet, j'ai aussi essayé de remplir le QComboBox avant d'appeler ui-> setupUi (this); dans le constructeur, mais le programme s'est écrasé. Le QComboBox a été créé en utilisant Qt Creator, je ne sais pas s'il est possible de le peupler avant qu'il ne soit affiché. – Linoliumz

+0

Qu'est-ce que vous avez défini comme 'SizePolicy' sur la liste déroulante? –

+0

Il est logique qu'essayer de remplir le combo avant d'appeler ui-> setupUi (this) provoquerait un segfault, car l'objet QComboBox n'a pas encore été instancié. Définissez AdjustPolicy sur QComboBox :: AdjustToContents. – Casey

8

Qt (4.6) la documentation en ligne a ceci à dire au sujet QComboBox:

enum SizeAdjustPolicy { AdjustToContents, AdjustToContentsOnFirstShow, AdjustToMinimumContentsLength, AdjustToMinimumContentsLengthWithIcon } 

Je suggère

  1. assurer la SizeAdjustPolicy est effectivement utilisé

  2. réglage du enum AdjustToContents. Comme vous mentionnez un fichier .ui, je suggère de le faire dans Designer. Normalement, il ne devrait pas y avoir quelque chose de fantaisiste dans votre constructeur concernant les choses que vous faites dans Designer.

+0

S'il vous plaît laissez-moi savoir comment faire cela sur Qt 3.3.6? – shan

Questions connexes