我正在调试使用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)中当前正在做的事情。