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.)

Foi útil?

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
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top