我正在調試用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