Tengo un QVector de QObjects QVector<QWidget*> question_vector;. Estos widgets son preguntas. (Mi aplicación es como un cuestionario).

Al crear un cuestionario, los tipos de preguntas se eligen de la selección en un comboBox, y dentro de la clase Preguntas, la pregunta se crea y se almacena en 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);
}

Esto es lo que parece

SingleLineEdit es el widget, el título, titleEdit, comentarios, commentsEdit. ¿Cómo accedo, por ejemplo, al texto de un componente individual del widget, commentsText QLineEdit?

0
Phauk 15 dic. 2016 a las 22:19

2 respuestas

La mejor respuesta

Creo que logré resolver lo que intentaba hacer (al menos en parte)

Así que tuve aquí

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

Lo que hice fue cambiar cosas como QLineEdit *commentsText = new QLineEdit; a section_commentsText = newLineEdit; - Tener QTextEdit *section_commentsText en mi pregunta. H.

Entonces pude hacer

Question *object = question_vector[0];
QString text = object->section_commentsText->text();
qDebug() << text;
1
Phauk 16 dic. 2016 a las 13:20

Transmita el elemento a QLineEdit:

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

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

Este es un aspecto básico de la programación C ++; probablemente debería leer un poco sobre las clases de C ++, cómo derivarlas, cómo usar los punteros de la clase base y los punteros de la clase derivada, etc.

1
goug 15 dic. 2016 a las 22:21