2016-12-15 3 views
0

Ich habe einen QVector von QObjects QVector<QWidget*> question_vector;. Diese Widgets sind Fragen. (Meine Bewerbung ist wie eine Fragebogensache).Zugriff auf QObject-Aspekte, die in QVector gespeichert sind

Beim Erstellen eines Fragebogens werden die Fragetypen aus der Auswahl in einer ComboBox ausgewählt und innerhalb der Questions-Klasse wird die Frage erstellt und im QVector gespeichert.

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

Die SingleLineEdit ist das Widget, der Titel, titleEdit, Kommentare, commentsEdit. Wie greife ich zum Beispiel auf den Text von einer einzelnen Komponente des Widgets zu, die KommentareText QLineEdit?

+0

Sie bereits ähnliche Fragen gestellt haben, zu tun: http://stackoverflow.com/questions/41098139/mainpulating-a-qobject-created-from-a-button-press und bekam Antwort. Was genau ist dein Problem? –

+0

Ja, das hat line_edit_vector [index] -> text(); den Text von QVector erhalten line_edit_vector; So jetzt bin ich weiter und mit QVector question_vector; wie verschiedene Arten von Widget hinzugefügt werden, anstatt nur Lineedits, also, wenn ich eine Lineedit innerhalb des Objekts bei Frage_vector [3] habe, woher bekomme ich die Informationen von diesem? question_vector [3] -> commentsText-> text(); funktioniert nicht – Phauk

Antwort

1

Ich glaube, ich habe es geschafft, zu lösen, was ich (zumindest teilweise)

So hatte ich hier

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

Was ich tat, wurde geändert Sachen wie QLineEdit *commentsText = new QLineEdit; zu section_commentsText = newLineEdit; zu tun versuchte - QTextEdit *section_commentsText in meiner question.h haben.

Ich war dann in der Lage

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

Guss das Element zum einem QLineEdit:

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

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

Dies ist ein grundlegender Aspekt der C++ Programmierung; Sie sollten wahrscheinlich etwas über C++ - Klassen lesen, wie man sie ableitet, wie man Basisklassenzeiger und abgeleitete Klassenzeiger verwendet, und so weiter.

+0

Sie müssen Ihre Question-Klasse erweitern, um den Zugriff auf den Inhalt von QLineEdit zu ermöglichen. Das von mir vorgeschlagene Casting ist falsch; Ich verstehe nicht, was deine Klasse war. Da Question eine Reihe von Widgets kapselt, müssen Sie Methoden zu Question hinzufügen, damit externe Anrufer den Text erhalten können: – goug

Verwandte Themen