2016-12-15 7 views
0

J'ai un QVector de QObjects QVector<QWidget*> question_vector;. Ces widgets sont des questions. (Ma demande est comme une question de questionnaire).Accès aux aspects de QObject stockés dans QVector

Lors de la création d'un questionnaire, les types de questions sont choisis à partir de la sélection sur un comboBox, et dans la classe Questions, la question est créée et stockée dans QVector.

void CreateSurvey::comboBox_selection(const QString &arg1) 
{ 
    if(arg1 == "Single Line Text") 
    { 
    Question *singleLineText = new Question("Single Line Text"); 
    surveyLayout->addWidget(singleLineText); 
    question_vector.append(singleLineText); 
    qDebug() << "Number of items: "<< question_vector.size(); 

    } ... 
} 

void Question::create_singleLineEdit() 
{ 
    QVBoxLayout *vLayout = new QVBoxLayout; 
    QLabel *titleLabel = new QLabel("Title"); 
    vLayout->addWidget(titleLabel); 
    QLineEdit *inputText = new QLineEdit; 
    vLayout->addWidget(inputText); 
    QLabel *commentsLabel = new QLabel("Comments"); 
    vLayout->addWidget(commentsLabel); 
    QLineEdit *commentsText = new QLineEdit; 
    vLayout->addWidget(commentsText); 

    ui->frame->setLayout(vLayout); 
} 

This is what it looks like

Le SingleLineEdit est le widget, le titre, titleEdit, commentaires, commentsEdit. Comment accéder, par exemple, au texte d'un composant individuel du widget, à commentsText QLineEdit?

+0

vous avez déjà posé la question similaire: http://stackoverflow.com/questions/41098139/mainpulating-a-qobject-created-from-a-button-press et a obtenu une réponse. Quel est exactement votre problème? –

+0

Ouais que l'on a line_edit_vector [index] -> text(); obtenir le texte de QVector line_edit_vector; donc maintenant je passe et j'ai QVector question_vector; comme différents types de widgets sont ajoutés plutôt que simplement des lineedits, donc si j'ai un lineedit dans l'objet de question_vector [3], comment puis-je obtenir les informations de cela? question_vector [3] -> commentairesText-> text(); doesnt work – Phauk

Répondre

1

Je pense avoir réussi à résoudre ce que je voulais faire (au moins partiellement)

J'avais ici

void Question::create_singleLineEdit() 
{ 
    QVBoxLayout *vLayout = new QVBoxLayout; 
    QLabel *titleLabel = new QLabel("Title"); 
    vLayout->addWidget(titleLabel); 
    QLineEdit *inputText = new QLineEdit; 
    vLayout->addWidget(inputText); 
    QLabel *commentsLabel = new QLabel("Comments"); 
    vLayout->addWidget(commentsLabel); 
    QLineEdit *commentsText = new QLineEdit; 
    vLayout->addWidget(commentsText); 
    ui->frame->setLayout(vLayout); 
} 

Ce que j'ai été changé des choses comme QLineEdit *commentsText = new QLineEdit; à section_commentsText = newLineEdit; - Ayant QTextEdit *section_commentsText dans ma question.h.

ai-je été capable de faire

Question *object = question_vector[0]; 
QString text = object->section_commentsText->text(); 
qDebug() << text; 
1

Cast l'élément à l'un QLineEdit:

QLineEdit *line_edit = dynamic_cast <QLineEdit *> (question_vector[3]); 

if (line_edit) 
{ 
    QString text = line_edit->text(); 
} 

Ceci est un aspect fondamental de programmation C++; vous devriez probablement faire quelques lectures sur les classes C++, comment les dériver, comment utiliser les pointeurs de classe de base et les pointeurs de classe dérivés, et ainsi de suite.

+0

Vous devrez étendre votre classe Question pour fournir l'accès au contenu contenu dans QLineEdit. Le casting que j'ai proposé est incorrect; Je me méprends sur ce qu'était votre classe Question. Puisque Question encapsule un tas de widgets, vous devez ajouter des méthodes à Question afin que les appelants externes puissent obtenir le texte: – goug