Come faccio a fare un QVector di widget?
Domanda
Come faccio a fare un QVector
(o qualche altra classe contenitore) di un numero dinamica di widget, come QPushButton
o QComboBox
in Qt 4?
Ho usato il seguente nel costruttore della mia classe di finestra:
QVector<QComboBox*> foo; // Vector of pointers to QComboBox's
E ora voglio riempirlo con qualche numero di controlli che possono cambiare in modo dinamico:
for(int count = 0; count < getNumControls(); ++count) {
foo[count] = new QComboBox();
}
Ho cercato per ore cercando di trovare la risposta a questo. I forum Qt ma va specificato facendo un QPtrList
, ma quella classe non esiste più in Qt4.
Mi piacerebbe poi cerco di ottenere il valore di testo da ogni utilizzando l'indicizzazione su array stile o la funzione .at()
.
Vorrei davvero apprezzare un esempio di dichiarare, l'inizializzazione, e popolando qualsiasi struttura di dati di qualsiasi QWidgets
(QComboBox
, QPushButton
, ecc.)
Soluzione
qui si va:)
#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" );
}
Se si sta cercando solo per ottenere un semplice esempio per lavorare, è importante che i widget hanno un genitore (per il contesto / ripulire) scopi.
Spero che questo aiuti.
Altri suggerimenti
foo[count] = new QComboBox();
Ciò non influirà la dimensione di foo. Se non c'è già un elemento al conteggio indice, questo sarà sicuro. Vedere push_back , o operatore <<, che aggiungono un elemento alla fine della lista.
QVector<QComboBox*> foo;
// or QList<QComboBox*> foo;
for(int count = 0; count < getNumControls(); ++count) {
foo.push_back(new QComboBox());
// or foo << (new QComboBox());
}
In seguito, per recuperare i valori:
foreach (QComboBox box, foo)
{
// do something with box here
}