如何在Qt中将模态对话框窗口转换为非模态对话框窗口?

时间:2015-07-14 13:21:49

标签: c++ qt loops exec show

我有多个QDialog窗口。所有窗口都使用exampleWindow->exec()创建。这导致当时只有一个窗口打开。

我必须将这些窗口转换为non-modal dialog window

这里是我项目的示例代码示例。当exec()使用时,系统进入循环并等待用户在窗口上做某事。

int result = exampleWindow->exec();

if ( exampleWindow== QDialogButtonBox::Ok )
{
    exampleWindow->UpdateCalibrationData(&data);
    exampleWindow->UpdateFilterData(&filterData);
    SetCalibrationStatusToSuccess();
}

但我想把这个转换成那样:

exampleWindow->show();
// and I need to some loop here for the wait answer of dialog

2 个答案:

答案 0 :(得分:4)

您可以使用

创建非模态对话框
exampleWindow->show();

用户关闭对话框后,您可以获得对话框发出的信号:

QObject::connect(&exampleWindow, SIGNAL(accepted()), this, SLOT(doSomething());

并在该插槽函数中接收对话框数据。

答案 1 :(得分:2)

我没有足够的声誉可以发表评论。但如果使用QDialog,您只需调用myDialog->show()如果您将对话框作为成员变量,则它只能有一个自己的打开实例。如果你想制作非模态的东西,你可以在该对话框上设置一个设置或标志。

    QDialog::show();
    QDialog::setModal();

如果您查看文档。请你能让你的问题更清楚一点吗?你的实际问题是什么?或者只是偏好您希望展示QDialog的方式。正如上面的帖子所示,如果对话框已被关闭/接受,您可以检查信号和插槽。

最好使用

QObject::connect(obj, &Class::signal, obj, &Class::slot) - 如果信号和插槽无法连接,这将导致编译器错误。

connect(obj, SIGNAL(), obj, SLOT()) - 因为这只会给你一个运行时错误。但不会崩溃或输出警告,只会继续。