Вызов activWindow на QDialog отправляет окно в фоновый режим - PullRequest
1 голос
/ 07 мая 2010

Я отлаживаю определенное приложение, написанное на 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() 

приложение работает как положено. Это кажется неправильным, поскольку документация для activWindow не указывает никаких условий, при которых что-то подобное может произойти.

Мой вопрос: Есть ли какая-то причина, чтобы активировать окно в showEvent в первую очередь? Если есть какая-то причина, какой будет хороший обходной путь для решения проблем?

Ответы [ 2 ]

1 голос
/ 11 мая 2010

I. тоже видели такое поведение.

Согласно документации :

На X11 результат зависит от диспетчера окон

Похоже, что Gnome занимает ту же позицию, что и Microsoft Windows, не позволяя приложению прерывать то, что пользователь в данный момент делает в другом приложении (в данном случае это Terminal).

0 голосов
/ 15 февраля 2011

Проблема, скорее всего, была вызвана ошибкой в ​​Qt. Я не могу воспроизвести такое же поведение в последних версиях Qt. Изначально воспроизведено на Fedora 13, Fedora 14 работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...