对话框按照是否可以在运行时可以和其他窗口进行交互可以分为:模态与非模态对话框。
直接看例子:
main.cpp
|
|
因为我们只在 MainWindow的构造函数中实验,所以只有定义即可。
可以看到一个窗口一闪而过。剩下的是w窗口被保留,在函数的构造函数里面我们定义了一个窗口win并且指定了this(w) 为其父,在运行中其一闪而过的只剩下W原因是:他并没有实际的内存空间,在构造函数被调用完之后他就被销毁了,所以我们可以使用指针给他new一个空间:
这样win窗口就被保留下来。
此外因为上段程序中指定了父窗口,所以在new完之后不需要进行delete其会随父窗口进行销毁。
我们也可以用:
这样会发现win对话框被显示,但是其父窗口没有被显示。
只有我们关闭了win之后w窗口才会被显示出来。
这种对话框我们称之为模态对话框,而上面的写法被成为非模态对话框。
可以看到,如果让窗口是非模态的只需使用指针进行new即可,而让窗口是模态的只需调用其exec()属性即可。
当然 我们也可以使用setModal()函数进行声明。
这种写法可以将win变为模态的,在运行时候会发现,两个窗口都会出现,但是我们只能对win进行拖拽等操作,只有关闭了win才可以对w进行操作。
原因:
因为在运行完show()之后程序会将控制权交给调用者继续执行,而exec()则是在程序执行完操作之后才交出控制权从而继续执行。
还有和setModal()相似的函数,setWindowModality()它可以通过设置参数来进行模态和模态的控制有: