Как передать данные из одной формы в другую в Qt? - PullRequest
7 голосов
/ 01 июня 2011

Как я могу передавать данные из одной формы в другую в Qt?
Я создал QWidgetProgect -> QtGuiApplication, у меня есть две формы в настоящее время. Теперь я хочу передать данные из одной формы в другую.

Как мне этого добиться?

Спасибо.

Ответы [ 2 ]

16 голосов
/ 01 июня 2011

Вот несколько вариантов, которые вы можете попробовать:

  • Если одна форма владеет другой, вы можете просто создать метод в другой и вызвать его
  • Вы можете использовать механизм Qt's Signals and slots , сделать сигнал в форме с текстовым полем и подключить его к слоту, который вы делаете в другой форме (вы также можете связать его с текстовым полем textChanged или textEdited сигнал)

Пример с сигналами и слотами:

Предположим, у вас есть два окна: FirstForm и SecondForm. FirstForm имеет QLineEdit на своем пользовательском интерфейсе с именем myTextEdit, а SecondForm имеет QListWidget на своем пользовательском интерфейсе с именем myListWidget.

Я также предполагаю, что вы создаете оба окна в функции main() вашего приложения.

firstform.h:

class FistForm : public QMainWindow
{

...

private slots:
    void onTextBoxReturnPressed();

signals:
    void newTextEntered(const QString &text);

};

firstform.cpp

// Constructor:
FistForm::FirstForm()
{
    // Connecting the textbox's returnPressed() signal so that
    // we can react to it

    connect(ui->myTextEdit, SIGNAL(returnPressed),
            this, SIGNAL(onTextBoxReturnPressed()));
}

void FirstForm::onTextBoxReturnPressed()
{
    // Emitting a signal with the new text
    emit this->newTextEntered(ui->myTextEdit->text());
}

secondform.h

class SecondForm : public QMainWindow
{

...

public slots:
    void onNewTextEntered(const QString &text);
};

secondform.cpp

void SecondForm::onNewTextEntered(const QString &text)
{
    // Adding a new item to the list widget
    ui->myListWidget->addItem(text);
}

main.cpp

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    // Instantiating the forms
    FirstForm first;
    SecondForm second;

    // Connecting the signal we created in the first form
    // with the slot created in the second form
    QObject::connect(&first, SIGNAL(newTextEntered(const QString&)),
                     &second, SLOT(onNewTextEntered(const QString&)));

    // Showing them
    first.show();
    second.show();

    return app.exec();
}
2 голосов
/ 01 июня 2011

Вы также можете использовать указатели для доступа к QTextEdit (при условии, что вы используете это) из другой формы.

Следуя примеру Venemo (где FirstForm имеет QTextEdit, а SecondForm - тот, к которому вам нужен доступ)QTextEdit от):

firstform.h:

class FistForm : public QMainWindow
{

...

public:
    QTextEdit* textEdit();
};

firstform.cpp:

QTextEdit* FirstForm::textEdit()
{
    return ui->myTextEdit;
}

Выможет затем получить доступ к тексту QTextEdit в SecondForm с помощью чего-то вроде этого (при условии, что ваш экземпляр FirstForm называется firstForm):

void SecondForm::processText()
{
    QString text = firstForm->textEdit()->toPlainText();
    // do something with the text
}
...