访问存储在QVector中的QObject的各个方面

时间:2016-12-15 19:19:56

标签: qt qobject qvector

我有一个QObjects QVector QVector<QWidget*> question_vector;。这些小部件都是问题。 (我的申请就像问卷调查一样)。

创建问卷时,会从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,comments,commentsEdit。 如何访问小部件的单个组件中的文本,commentsText QLineEdit?

2 个答案:

答案 0 :(得分:1)

将元素转换为QLineEdit:

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

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

这是C ++编程的基本方面;您可能应该阅读C ++类,如何派生它们,如何使用基类指针和派生类指针等等。

答案 1 :(得分: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

我当时能够做到

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