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.)

War es hilfreich?

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
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top