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를 사용해야하는 이유가 있습니까? 어떤 이유가있을 경우 초점을 맞추기위한 좋은 해결 방법은 무엇입니까?
글쎄, 만약 내 윈도우가 위에 있지 않기 때문에 activateWindow에 대한 호출을 무시할 수는 있지만 실제로는 정확히 반대이다. (호출 제거에 관한 나의 노트를 보라). 나는 이것이 gnome-wm 또는 Qt4의 버그라고 생각하기 시작했습니다. – Stan