Como posso fazer uma QVector de widgets?
Pergunta
Como posso fazer uma QVector
(ou alguma outra classe container) de um número dinâmico de widgets, como QPushButton
ou QComboBox
em Qt 4?
Eu usei o seguinte no construtor da minha classe de janela:
QVector<QComboBox*> foo; // Vector of pointers to QComboBox's
E agora eu quero para preenchê-lo com algum número de controles que podem mudar dinamicamente:
for(int count = 0; count < getNumControls(); ++count) {
foo[count] = new QComboBox();
}
Eu procurei por horas tentando encontrar a resposta para isso. Os fóruns Qt mencionar fazer um QPtrList
, mas essa classe não existe mais no Qt4.
Mais tarde eu iria tentar obter o valor de texto de cada usando a indexação de estilo array ou a função .at()
.
eu apreciaria realmente um exemplo de declarar, inicializar, e preencher qualquer estrutura de dados de qualquer QWidgets
(QComboBox
, QPushButton
, etc.)
Solução
aqui vai:)
#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" );
}
Se você está tentando apenas para obter um exemplo simples para o trabalho, é importante que os seus widgets ter um pai (para o contexto / clean up) propósitos.
Espero que isso ajude.
Outras dicas
foo[count] = new QComboBox();
Isso não afetará o tamanho do foo. Se já não é um item na contagem de índice, este irá falhar. Consulte push_back , ou operador <<, que adicionar um item ao final da lista.
QVector<QComboBox*> foo;
// or QList<QComboBox*> foo;
for(int count = 0; count < getNumControls(); ++count) {
foo.push_back(new QComboBox());
// or foo << (new QComboBox());
}
Mais tarde, para recuperar os valores:
foreach (QComboBox box, foo)
{
// do something with box here
}