调用QDialog的activateWindow将窗口置于后台
我正在调试一个用C++/Qt4写的应用程序。在Linux上,它在某些窗口管理器(比如gnome-wm/metacity)下有问题,主窗口(基于QDialog)会在后台创建(也就是没有被提升到最前面)。我用PyQt4重现了这个情况,以下是相关代码:
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
class PinDialog(QDialog):
def showEvent(self, event):
QDialog.showEvent(self, event)
self.raise_()
self.activateWindow()
if __name__ == "__main__":
app = QApplication(sys.argv)
widget = PinDialog()
app.setActiveWindow(widget)
widget.exec_()
sys.exit(0)
如果我去掉
self.activateWindow()
这个部分,应用程序就能正常工作了。这似乎不太对,因为关于activateWindow的文档并没有说明在什么情况下会出现这样的情况。
我的问题是:在showEvent中使用activateWindow有没有什么理由?如果有理由的话,解决聚焦问题的好方法是什么?
2 个回答
1
我也遇到过这种情况。
根据文档的说法:
在X11系统上,结果取决于窗口管理器。
看起来,Gnome的做法和微软Windows很像,都不允许一个应用程序打断用户在另一个应用程序(在这个例子中是终端)中正在进行的操作。
0
这个问题很可能是因为Qt里面的一个错误导致的。我在最近的Qt版本中无法再出现同样的情况。最开始是在Fedora 13上出现的,而在Fedora 14上就没问题了。