Вопрос

Как мне сделать 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
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top