Pregunta

¿Cómo hago un QVector (o alguna otra clase de contenedor) de un número de widgets dinámicos, tales como QPushButton o QComboBox en Qt 4?

He utilizado el siguiente en el constructor de mi clase de ventana:

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

Y ahora quiero llenarlo con algún número de controles que pueden cambiar de forma dinámica:

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

He buscado durante horas tratando de encontrar la respuesta a esto. Los foros de Qt mencionan hacer una QPtrList, pero esa clase ya no existe en Qt4. Más tarde me iba a tratar de obtener el valor de texto de cada una utilizando la indexación de estilo matriz o la función .at().

I realmente apreciaría un ejemplo de declarar, inicializando, y llenar cualquier estructura de datos de cualquier QWidgets (QComboBox, QPushButton, etc.)

¿Fue útil?

Solución

Aquí van:)

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

Si usted está tratando sólo para obtener un ejemplo sencillo para trabajar, es importante que sus widgets tienen un padre (para el contexto / limpiar) propósitos.

Espero que esto ayude.

Otros consejos

foo[count] = new QComboBox();

Esto no afectará el tamaño de foo. Si no hay ya un artículo en el número de índice, se producirá un error. Ver push_back , o operador <<, que añadir un elemento al final de la lista.

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

Más tarde, para recuperar los valores:

foreach (QComboBox box, foo)
{
  // do something with box here
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top