打开另一个表单,然后等待该表单返回响应

时间:2013-08-20 21:48:44

标签: c++ qt

我目前有一个表格,说需要一些输入。然而,为了获得该输入,另一种形式称B需要填充。所以我想要的是当用户点击formA中的按钮时,会显示formB。现在,当单击表单B中的按钮时,结果将返回到formA。做这个的最好方式是什么。 ?目前我有一个表格A只显示表格B然后我卡住了。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您可能希望从formB课程继承QDialog,然后致电exec()而不是show()

来自docs

  

将对话框显示为模式对话框,直到用户关闭它为止。该函数返回DialogCode结果。

     

如果对话框是应用程序模式,则用户在关闭对话框之前无法与同一应用程序中的任何其他窗口进行交互。如果对话框是窗口模式,则在对话框打开时仅阻止与父窗口的交互。默认情况下,对话框是应用程序模式。

与此相关,您可能希望在QDialog::accept中使用QDialog::rejectQDialog::setResultformB,以便将结果传递给formA。< / p>

答案 1 :(得分:0)

考虑到您使用的是Qt,最简单的方法是使用信号和插槽。当按下该按钮时,您可以使FormB发出包含所需数据的信号。可以使FormA连接到此信号并填写其形式。

这个示例代码非常抽象,但您应该能够获得一般意义 -

void FormA::slotButtonClicked() {
    FormB* b = new FormB(this);
    connect(b, SIGNAL(requiredData(QVariant)), 
            this, SLOT(slotFormBData(QVariant())));

    // Logic to show form B
}

void FormA::slotFormBData(const QVariant& data) {
    // Fill Form A fields with data
}

void FormB::slotButtonClicked() {
    QString data = m_lineEdit->text();
    emit requiredData(data);
}

如果您不想通过信号发出所有数据,您还可以FormB发出done(FormB*) FormA可以挂钩的信号,然后拨打FormB }的成员函数来获取所有必需的数据。