我正在调试使用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吗?如果有某种原因,那么解决问题的最佳方法是什么?

最佳答案

我也看到了这种行为。

根据the documentation:



似乎Gnome采取了与Microsoft Windows相同的立场,不允许应用程序中断用户在另一个应用程序(在本例中为Terminal)中当前正在做的事情。

10-08 08:00