Comment puis-je faire un QVector de widgets?
Question
Comment puis-je faire un QVector
(ou d'une autre classe de conteneur) d'un nombre dynamique de widgets, tels que QPushButton
ou QComboBox
dans Qt 4?
Je l'ai utilisé ce qui suit dans le constructeur de ma 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();
}
Je l'ai cherché pendant des heures à essayer de trouver la réponse à cette question. Les forums Qt mentionnent faire un QPtrList
, mais cette classe n'existe plus en Qt4.
Je vais essayer plus tard pour obtenir la valeur de texte de chaque indexation à l'aide de style 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.)
La solution
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 essayez juste d'obtenir un exemple simple pour travailler, il est important que vos widgets ont un parent (pour le contexte / nettoyage) fins.
Hope this helps.
Autres conseils
foo[count] = new QComboBox();
Cela n'affectera pas la taille de foo. S'il n'y a pas déjà un élément à nombre d'index, ce échouera. Voir push_back ou <<< opérateur / a>, 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 suivantes:
foreach (QComboBox box, foo)
{
// do something with box here
}