Как мне создать QVector из виджетов?
Вопрос
Как мне сделать QVector
(или какой-либо другой класс контейнера) динамического количества виджетов, таких как QPushButton
или QComboBox
в Qt 4?
Я использовал следующее в конструкторе моего класса window:
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
, и т.д.)
Решение
вот так :)
#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" );
}
Если вы пытаетесь просто заставить работать простой пример, важно, чтобы у ваших виджетов был родительский элемент (для целей контекста / очистки).
Надеюсь, это поможет.
Другие советы
foo[count] = new QComboBox();
Это не повлияет на размер foo.Если при подсчете индекса элемента еще нет, это приведет к сбою.Видишь обратный толчок, или оператор<<, которые добавляют элемент в конец списка.
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
}