2016-12-15 9 views
0

У меня есть QVector QObjects QVector<QWidget*> question_vector;. Эти виджеты - это вопросы. (Мое приложение похоже на вопросник).Доступ к аспектам QObject, хранящимся в QVector

При создании вопросника типы вопросов выбираются из выбора в comboBox и в классе вопросов, вопрос создается и сохраняется в 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

SingleLineEdit это виджет, название, titleEdit, комментарии, commentsEdit. Как получить доступ, например текст от отдельного компонента виджета, commentText QLineEdit?

+0

вы уже задавали подобный вопрос: http://stackoverflow.com/questions/41098139/mainpulating-a-qobject-created-from-a-button-press и получил ответ. Какова ваша проблема? –

+0

Да, у этого есть line_edit_vector [index] -> text(); получение текста QVector line_edit_vector; поэтому теперь im движется дальше и имеет QVector question_vector; по мере добавления новых типов виджетов, а не только для строк, поэтому, если у меня есть строка в объекте в question_vector [3], как мне получить информацию от этого? question_vector [3] -> commentsText-> текст(); не работает – Phauk

ответ

1

Я думаю, что мне удалось решить, что я пытался сделать (по крайней мере, частично)

Так что я был здесь

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

То, что я изменился вещи, как QLineEdit *commentsText = new QLineEdit; к section_commentsText = newLineEdit; - Имея QTextEdit *section_commentsText в моем вопросе.h.

Я был тогда в состоянии сделать

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

В ролях элемент в виде QLineEdit:

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

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

Это основной аспект программирования C++; вы, вероятно, должны сделать некоторые чтения на C++-классах, как их получить, как использовать указатели базового класса и указатели на производные классы и т. д.

+0

Вам необходимо расширить свой класс вопросов, чтобы обеспечить доступ к содержимому, содержащемуся в QLineEdit. Кастинг, который я предложил, неверен; Я неправильно понимаю, каков был ваш класс вопросов. Поскольку Question инкапсулирует кучу виджетов, вам нужно добавить методы к Вопросу, чтобы внешние вызывающие лица могли получить текст: – goug