我正在调试用C++/Qt4编写的某些应用程序。在Linux上,它有一些问题,对于某些窗口管理器(gnome-wm/metacity),主窗口(基于QDialog)是在后台创建的(不会引发)。我设法重新创建使用PyQt4的和以下代码方案:调用QDialog上的activateWindow将窗口发送到背景
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?如果有某种原因,那么聚焦问题有什么好的解决方法?
嗯,我会明白,如果我会忽略对activateWindow的调用,因为我的窗口不在顶部,但它有效地完全相反(请参阅我的关于删除调用的注释)。我开始认为这是gnome-wm或Qt4中的一个bug – Stan 2010-05-11 13:42:36