2010-06-30 6 views
17

Ho un QComboBox che riempio con QString utilizzando:Come si imposta la larghezza QComboBox per adattarla all'elemento più grande?

comboBox->addItem(someString); 

Quando comincio la mia applicazione GUI la larghezza della comboBox è sempre 70, anche se l'elemento più piccolo è molto più grande. Come posso impostare dinamicamente la larghezza di un QComboBox, ad esempio, al più grande QString all'interno del comboBox?

Edit:

Dopo qualche ulteriore prova ho trovato la seguente soluzione:

// 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

Inoltre, se si desidera mantenere la casella combinata della stessa dimensione, ma ampliare la larghezza discesa per adattare la stringa più lunga, è possibile impostare la larghezza minima della vista: 'UI-> sieveSizeComboBox-> vista () -> setMinimumWidth (larghezza); ' – Matthew

risposta

6

Secondo il docs default SizeAdjustPolicy è AdjustToContentsOnFirstShow così forse si sta mostrando e poi ha popolato?

O popolarlo prima di mostrarlo o provare a impostare il criterio su QComboBox::AdjustToContents.

Edit:

BTW sto supponendo che avete la QComboBox in un layout adeguato, ad es. QHBoxLayout, in modo che il suggerimento/criterio di dimensioni sia effettivamente utilizzato.

+0

Grazie, sì, QComboBox si trova in un QHBoxLayout. Ho provato a modificare SizeAdjustPolicy ma non ha avuto alcun effetto, ho anche provato a popolare il QComboBox prima di chiamare ui-> setupUi (this); nel costruttore ma il programma si è bloccato. Il QComboBox è stato creato usando Qt Creator, non so se è possibile popolarlo prima che venga mostrato. – Linoliumz

+0

Cosa hai impostato come 'SizePolicy' nella casella combinata? –

+0

È logico che provare a popolare la combo prima di chiamare ui-> setupUi (this) causerebbe un segfault, perché l'oggetto QComboBox non è stato ancora istanziato. Impostare AdjustPolicy su QComboBox :: AdjustToContents. – Casey

8

Qt (4.6) documentazione in linea ha questo da dire su QComboBox:

enum SizeAdjustPolicy { AdjustToContents, AdjustToContentsOnFirstShow, AdjustToMinimumContentsLength, AdjustToMinimumContentsLengthWithIcon } 

Vorrei suggerire

  1. garantire la SizeAdjustPolicy viene effettivamente utilizzato

  2. impostando l'enum a AdjustToContents. Come si menziona un file .ui, suggerisco di farlo in Designer. Normalmente non ci dovrebbe essere niente di speciale nel costruttore per quanto riguarda le cose che fai in Designer.

+0

Per favore fatemi sapere come farlo su Qt 3.3.6? – shan

Problemi correlati