如何在Qt中将数据从一种形式传递到另一种形式?

时间:2011-06-01 10:50:06

标签: qt qt4 qwidget

如何在Qt中将数据从一种形式传递到另一种形式? 我创建了一个QWidgetProgect - > QtGuiApplication,我目前有两种形式。现在我想将数据从一种形式传递到另一种形式。

我怎样才能做到这一点?

感谢。

2 个答案:

答案 0 :(得分:16)

以下是您可能想要尝试的一些选项:

  • 如果一个表单拥有另一个表单,您可以在另一个表单中创建一个方法并将其命名为
  • 您可以使用Qt的Signals and slots机制,使用文本框在表单中发出信号,然后将其连接到您在其他表单中创建的插槽(您也可以将其与文本框textChanged连接或textEdited信号)

信号和插槽的示例:

假设您有两个窗口:FirstFormSecondFormFirstForm在其用户界面上有QLineEdit,名为myTextEditSecondForm在其用户界面上有一个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();
}

答案 1 :(得分:2)

你也可以使用指针来访问另一种形式的QTextEdit(假设你正在使用它)。

以下来自Venemo的示例(其中FirstForm具有QTextEdit和SecondForm是您需要访问QTextEdit的那个):

<强> firstform.h:

class FistForm : public QMainWindow
{

...

public:
    QTextEdit* textEdit();
};

<强> firstform.cpp:

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

然后,您可以使用类似的方式访问SecondForm中的QTextEdit文本(假设您的FirstForm实例名为firstForm):

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