模态与非模态对话框

模态对话框就是没有关闭它之前,不能再与同一个应用程序的其他窗口进行交互。要想使一个窗口成为模态对话框,只需要调用它的exec()函数,而要使其成为非模态对话框,可以使用new操作来创建,然后使用show()函数来显示。其实使用show()函数也可以创建模态对话框,只需要在其前面使用setModal()函数即可。例如:

QDialog *dialog = new QDialog(this);
dialog->setModal(true);
dialog->show();

现在运行程序就可以看到生成的对话框是模态的。但是,它与用exec()函数时的效果是不一样的,因为现在dialog窗口的父对象窗口也显示出来了。这是因为调用完show()函数后会立即将控制权交给调用者,那么程序可以往下继续执行。而调用exec()函数却不同,它只有当对话框被关闭时才返回。


与setModal()函数相似的还有一个setWindowModality()函数,它有一个参数来设置模态对话框要阻塞的窗口类型,可以是Qt::NonModal(不阻塞任何窗口,就是非模态)、Qt::WindowModal(阻塞它的父窗口和所有祖先窗口以及它们的子窗口)、Qt::ApplicationModal(阻塞整个应用程序的所有窗口)三者之一。而setModal()函数默认设置是Qt::ApplicationModal.

版权声明:本文为博主原创文章,未经博主允许不得转载。

你可能感兴趣的:(qt,对话框,对话框类型)