0

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

4

2 回答 2

1

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

来自文档

将对话框显示为模态对话框,在用户关闭它之前一直处于阻塞状态。该函数返回一个 DialogCode 结果。

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

与此结合,您可能想要使用QDialog::accept,QDialog::rejectQDialog::setResultinformB以便将结果传递给formA.

于 2013-08-20T22:07:18.140 回答
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的成员函数来获取所有需要的数据。

于 2013-08-20T22:09:32.867 回答