1. 问题描述:
由于程序中对QDialog使用方式的错误,导致在新版本中出现一个奇怪的问题。其主要表现为:
当界面继承QDialog以后,设置非模态,并直接调用show后,弹出新界面覆盖在这个Dialog上时,点击其他未被遮挡的区域,会自动激活QDialog画面,自动激活后,导致QDialog显示在新界面的上面了。
也就是说,当使用QDialog,非模态时,如果有其他界面显示在这个对话框上层,且没有完全遮挡时,点击其他对话框,这个对话框会自动获取焦点,并显示在最上层。
2. 解决办法:
这个问题,是由于QDialog对话框的窗口属性导致的。需要强制修改窗口属性。代码如下:
this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnBottomHint | Qt::WindowDoesNotAcceptFocus);
其中起到作用的是这两个。
Qt::WindowStaysOnBottomHint | Qt::WindowDoesNotAcceptFocus