2010-05-07 1 views
1

C++/Qt4로 작성된 특정 응용 프로그램을 디버깅하고 있습니다. 리눅스에서는 특정 윈도우 관리자 (gnome-wm/metacity)에서 메인 윈도우 (QDialog 기반)가 백그라운드에서 생성된다는 문제가 있습니다. 나는 응용 프로그램이 예상대로 작동QDialog에서 activateWindow를 호출하면 배경으로 창을 보냅니다.

self.activateWindow() 

을 제거하면

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) 

: 나는 코드를 PyQt4를 사용하여 다음과 같은 시나리오를 다시 만들 수 있었다. activateWindow 에 대한 문서에서 이와 같은 상황이 발생할 수있는 조건을 지정하지 않았으므로 잘못된 것 같습니다.

내 질문 : showEvent에서 먼저 activateWindow를 사용해야하는 이유가 있습니까? 어떤 이유가있을 경우 초점을 맞추기위한 좋은 해결 방법은 무엇입니까?

답변

0

이 문제는 Qt의 버그로 인한 것일 수 있습니다. 최근의 Qt 버전에서는 동일한 동작을 재현 할 수 없습니다. 원래 Fedora 13에서 재현 된 Fedora 14는 정상적으로 작동합니다.

1

나도이 동작을 보았습니다. the documentation에 따르면

: X11에

는, 결과는 창 관리자에 따라 그놈 응용 프로그램이 중단 허용하지 않는 마이크로 소프트 윈도우와 같은 입장을 복용 것 같습니다

무엇 사용자가 현재 다른 응용 프로그램 (이 경우 터미널)에서 작업 중입니다.

+0

글쎄, 만약 내 윈도우가 위에 있지 않기 때문에 activateWindow에 대한 호출을 무시할 수는 있지만 실제로는 정확히 반대이다. (호출 제거에 관한 나의 노트를 보라). 나는 이것이 gnome-wm 또는 Qt4의 버그라고 생각하기 시작했습니다. – Stan

관련 문제