¿Cómo hago una QVector de widgets?
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.)
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
}