在QDialog上调用activateWindow会将窗口发送到后台

时间:2010-05-07 12:29:09

标签: c++ python linux qt pyqt

我正在调试用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中激活wins?如果有某些原因,那么聚焦问题的解决方法是什么?

2 个答案:

答案 0 :(得分:1)

予。也见过这种行为。

根据the documentation

  

在X11上,结果取决于窗口管理器

似乎Gnome采取与Microsoft Windows相同的立场,不允许应用程序中断用户当前在另一个应用程序中执行的操作(在本例中为终端)。

答案 1 :(得分:0)

问题很可能是由Qt中的错误引起的。我在最近的Qt版本中无法重现相同的行为。最初在Fedora 13上复制,Fedora 14工作正常。