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

Open another form and then wait for that form to return a response

本文关键字:表单 返回 响应 等待 另一个 然后      更新时间:2023-10-16

我目前有一个表单,比如a,需要一些输入。然而,为了获得该输入,需要填写另一个表格,比如B。所以我想要的是,当用户点击表格a中的按钮时,表格B就会显示出来。现在,当点击表单B中的按钮时,结果将返回到表单a。最好的方法是什么?目前我有一个只显示表格B的表格a,然后我就被卡住了。有什么建议吗?

您可能希望从QDialog类继承formB,然后调用exec()而不是show()

来自文档:

将对话框显示为模式对话框,在用户关闭它之前进行阻塞。函数返回DialogCode结果。

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

同时,您可能希望在formB中使用QDialog::acceptQDialog::rejectQDialog::setResult,以便将结果传递给formA

考虑到您正在使用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的成员函数来获取所有所需的数据。