Qt的QDialog对话框分为模态和非模态,就是阻塞和非阻塞意思,集成QWidget。与QWidget区别
QDialog:专门作为交互界面,不能作为子部件嵌入到其他界面容器内。
QWidget:可以作为父控件,也可以作为子控件(关于QWidget参数QWidget*探讨,查看官方文档QWidget* 被作为主窗口指针传参,相当于用子窗口this的parentWidget()获取父窗口,但是嘞如果这样做会影响到Qss效果比如QlistWidget效果(环境是vs2019+qt4.15.0 ))。
除此之外还有其他系统提供对话框:
模态对话框:
1.没有关闭,就无法与其他窗口交互
2.在栈上创建,通过exec()进入消息循环导致阻塞,可以通过DialogCode接收exec按下"确定"还是"取消"。
Rejected:操作从失败
Accepted:操作从成功
QDialog dlg;
if(dlg.exec() == Diaog::Accepted)
{
//...
}
else
{
//...
}
非模态对话框:
1.非阻塞模式,可以与其他窗口交互
2.一般在show()堆上,避免被销毁,需要通过setAttribute()设置属性自动销毁,
QDialog dlg = new QDialog();
dlg->setAttribute(Qt::WAWA_DeleteOnClose); //设置关闭窗口销毁
dig->show();
。