2010-05-07 94 views
1

我正在調試用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?如果有某種原因,那麼聚焦問題有什麼好的解決方法?

回答

0

這個問題最可能是由Qt中的一個錯誤引起的。我無法在最近的Qt版本中重現相同的行爲。最初轉載於Fedora 13上,Fedora 14正常。

1

我也是,見過這種行爲。

根據the documentation

在X11,結果取決於窗口管理器

看來,侏儒正在採取相同立場,微軟的Windows中不允許應用程序中斷什麼用戶目前正在另一個應用程序(在這種情況下爲終端)中執行操作。

+0

嗯,我會明白,如果我會忽略對activateWindow的調用,因爲我的窗口不在頂部,但它有效地完全相反(請參閱我的關於刪除調用的註釋)。我開始認爲這是gnome-wm或Qt4中的一個bug – Stan 2010-05-11 13:42:36