2009-08-24 8 views
2

Comment faire un QVector (ou une autre classe de conteneur) d'un nombre dynamique de widgets, tels que QPushButton ou QComboBox dans Qt 4?Comment créer un QVector de widgets?

Je l'ai utilisé ce qui suit dans mon constructeur de la classe de fenêtre:

QVector<QComboBox*> foo; // Vector of pointers to QComboBox's 

Et maintenant, je veux le remplir avec un certain nombre de contrôles qui peuvent changer de façon dynamique:

for(int count = 0; count < getNumControls(); ++count) { 
    foo[count] = new QComboBox(); 
} 

J'ai cherché pendant des heures en essayant de trouver la réponse à cela. Les forums Qt mentionnent la création d'un QPtrList, mais cette classe n'existe plus dans Qt4. Plus tard, j'essayerais d'obtenir la valeur du texte de chacun en utilisant l'indexation de type tableau ou la fonction .at().

J'apprécierais vraiment un exemple de déclarer, initialiser et peuplant une structure de données d'un QWidgets (QComboBox, QPushButton, etc.)

Répondre

10

ici vous allez :)

#include <QWidget> 
#include <QList> 
#include <QLabel> 
... 
QList< QLabel* > list; 
... 

list << new QLabel(parent, "label 1"); 
.. 
.. 

foreach(QLabel* label, list) { 
label->text(); 
label->setText("my text"); 
} 

Si vous êtes en essayant simplement de faire fonctionner un exemple simple, il est important que vos widgets aient un but parent (pour le contexte/nettoyage).

Espérons que cela aide.

+0

Je voulais insérer combo-boîtes à partir du fichier .ui dans une liste. J'ai inséré de cette façon: 'QList listComboBox;' 'listComboBox << (ui-> comboBoxTitle);' et récupéré comme ceci: 'QComboBox * comboBox = listComboBox.at (i);' qui fonctionne très bien! :) – zeFree

+0

QVector est maintenant préféré à QList ([en savoir plus] (https://stackoverflow.com/a/38263633/6165833)). – ymoreau

0
foo[count] = new QComboBox(); 

Ceci n'affectera pas la taille de foo. S'il n'y a pas déjà un élément au nombre d'index, cela échouera. Voir push_back ou operator<<, qui ajoute un élément à la fin de la liste.

QVector<QComboBox*> foo; 
// or QList<QComboBox*> foo; 
for(int count = 0; count < getNumControls(); ++count) { 
    foo.push_back(new QComboBox()); 
    // or foo << (new QComboBox()); 
} 

plus tard, pour récupérer les valeurs:

foreach (QComboBox box, foo) 
{ 
    // do something with box here 
}