Wie mache ich eine QVector von Widgets?
Frage
Wie mache ich eine QVector
(oder eine andere Container-Klasse) eine dynamische Anzahl von Widgets, wie QPushButton
oder QComboBox
in Qt 4?
Ich habe folgende in meinem Fenster Klasse Konstruktor verwendet:
QVector<QComboBox*> foo; // Vector of pointers to QComboBox's
Und nun möchte ich es mit einigen Anzahl der Kontrollen füllen, die sich dynamisch ändern können:
for(int count = 0; count < getNumControls(); ++count) {
foo[count] = new QComboBox();
}
Ich habe stundenlang gesucht versuchen, die Antwort auf diese Frage zu finden. Die Qt-Foren erwähnen machen eine QPtrList
, aber diese Klasse nicht mehr in Qt4.
Ich würde später versuchen, den Textwert von jedem zu erhalten unter Verwendung von Array-Stil Indizierung oder die .at()
Funktion.
Ich würde wirklich ein Beispiel erklärt schätzen, Initialisierung und bevölkert jede Datenstruktur eines QWidgets
(QComboBox
, QPushButton
usw.)
Lösung
hier geht:)
#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" );
}
Wenn Sie versuchen, nur ein einfaches Beispiel zur Arbeit zu kommen, es ist wichtig, dass Ihre Widgets einen Elternteil (für Kontext / clean up) Zwecke.
Hope, das hilft.
Andere Tipps
foo[count] = new QComboBox();
Dies wird nicht die Größe von foo beeinflussen. Wenn es nicht bereits ein Element in Indexzählwert ist, wird dies nicht gelingen. Siehe push_back oder Operator <<, die an das Ende der Liste ein Element hinzu.
QVector<QComboBox*> foo;
// or QList<QComboBox*> foo;
for(int count = 0; count < getNumControls(); ++count) {
foo.push_back(new QComboBox());
// or foo << (new QComboBox());
}
Später, um die Werte abrufen:
foreach (QComboBox box, foo)
{
// do something with box here
}