我正在调试用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?如果有某些原因,那么聚焦问题的解决方法是什么?
答案 0 :(得分:1)
予。也见过这种行为。
在X11上,结果取决于窗口管理器
似乎Gnome采取与Microsoft Windows相同的立场,不允许应用程序中断用户当前在另一个应用程序中执行的操作(在本例中为终端)。
答案 1 :(得分:0)
问题很可能是由Qt中的错误引起的。我在最近的Qt版本中无法重现相同的行为。最初在Fedora 13上复制,Fedora 14工作正常。