QDialog :: exec()阻止应用程序

时间:2013-09-12 15:15:41

标签: c++ qt

我目前有一个formA,它使用从QDialog继承的另一个表单请求用户输入。使用QDialog :: exec提示表单。现在的问题是formA会有多个实例,因此只要formA中的任何一个打开另一个表单作为整个应用程序阻塞的对话框。目前我有这样的东西

if(formUserInputRequired->exec()==1) //Block until the user selects from a form
{
}

有没有办法让QDialog :: exec不会阻塞整个应用程序我只想让它只阻止调用它的形式的实例或类似的东西,但绝对不是整个应用程序?

更新: 我不需要阻挡窗口。但是,我希望能够知道用户何时完成另一种形式的输入,以便原始表单可以处理该数据

4 个答案:

答案 0 :(得分:7)

使用setWindowModality作为参数调用对话框中的Qt::WindowModal方法。

Qt::NonModal          0  The window is not modal and does not block input to other windows.
Qt::WindowModal       1  The window is modal to a single window hierarchy and blocks input to its parent window, all grandparent windows, and all siblings of its parent and grandparent windows.
Qt::ApplicationModal  2  The window is modal to the application and blocks input to all windows.

Source

答案 1 :(得分:1)

将对话框的modality设置为Qt::WindowModal(QDialog的默认值为Qt::ApplicationModal

答案 2 :(得分:1)

您可以使用show()代替,然后抓取对话框结果,将accept的信号连接到formA的插槽来处理它,就像:

connect(formUserInputRequired, SIGNAL(accept()), this, SLOT(acceptClicked());
formUserInputRequired->show();

答案 3 :(得分:0)

您可以使用show()方法代替exec(),因为exec方法拥有自己的事件循环。