Как мне сделать QVector виджетов? - PullRequest
2 голосов
/ 24 августа 2009

Как мне сделать QVector (или некоторый другой контейнерный класс) из динамического числа виджетов, таких как QPushButton или QComboBox в Qt 4?

Я использовал следующее в конструкторе моего окна:

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

А теперь я хочу заполнить его некоторым количеством элементов управления, которые могут динамически меняться:

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

Я искал часы, пытаясь найти ответ на этот вопрос. Форумы Qt упоминают о создании QPtrList, но этот класс больше не существует в Qt4. Позже я попытаюсь получить текстовое значение каждого из них, используя индексацию в стиле массива или функцию .at().

Я был бы очень признателен за пример объявления, инициализации и заполнения любой структуры данных любой QWidgets (QComboBox, QPushButton и т. Д.)

Ответы [ 2 ]

10 голосов
/ 24 августа 2009

вот, пожалуйста:)

#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" );
}

Если вы пытаетесь заставить простой пример работать, важно, чтобы у ваших виджетов были родительские (для контекста / очистки) цели.

Надеюсь, это поможет.

0 голосов
/ 26 августа 2009
foo[count] = new QComboBox();

Это не повлияет на размер foo. Если в индексе нет элемента, это не удастся. См. push_back или operator << </a>, которые добавляют элемент в конец списка.

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

Позже, чтобы получить значения:

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