2014-12-06 2 views
1

다른 위젯의 위젯을 소비하지 않고 위젯에서 이벤트를 가로 채고 싶습니다.오버랩 위젯에서 이벤트를 가로 채고 전파하는 방법

내가 지금까지 가지고있는 것이있다. 겹쳐진 부분을 클릭하면 "Hello World"를 인쇄하고 싶지만 "Hello"만 표시됩니다.

import sys 
from PyQt5 import QtWidgets 


class Button(QtWidgets.QPushButton): 
    def mousePressEvent(self, event): 
     print self.text() 
     return super(Button, self).mousePressEvent(event) 


app = QtWidgets.QApplication(sys.argv) 
window = QtWidgets.QWidget() 
window.setFixedSize(200, 100) 

button1 = Button("World", window) 
button1.move(10, 10) 
button2 = Button("Hello", window) 
button2.move(50, 15) 

window.show() 
app.exec_() 

image

여기에 내가 무엇을 찾고 않는 QML의 예입니다. "세계"다음에 녹색 사각형 수율에 "Hello"를 클릭 반면 윈도우 수율 "세계"를 클릭

image

import QtQuick 2.0 


Item { 
    id: root 
    width: 200; height: 100 

    MouseArea { 
     anchors.fill: parent 
     onPressed: console.log("World") 
    } 

    Rectangle { 
     color: "green" 
     width: 100; height: 50 
     x: 10; y: 10 

     MouseArea { 
      anchors.fill: parent 
      propagateComposedEvents: true 
      onPressed: { 
       console.log("Hello"); 
       mouse.accepted = false; 
      } 
     } 
    } 
} 

. 열쇠는 여기 당신이 원하는 것을 이는 window attribute이 년대 propagateComposedEvents

답변

0

입니다 :

button = Button("Hello", window) 
button.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents) 
+0

감사합니다,하지만 난 당신이 질문을 오해 한 것 같아요. * "Hello"를 무시하지 않기를 원합니다. "Hello"*와 * "World"를 모두 인쇄하고 싶습니다. 즉 중첩 위젯이 이벤트를 수신 할뿐만 아니라 그 위젯에 직접 위젯을 전달합니다. –

+0

@MarcusOttosson. 공정하지만, 여러분의 질문은 매우 오해의 소지가 있습니다 (그리고 자기 모순) - 특히 "최상위 위젯이 완전히 투명해야합니다 - 즉 기본 위젯에 영향을 미치지 않아야합니다"라고 말하는 곳. 또한 예제 코드에는 결함이있어 트래커 문제로 표현 된 실제 의도가 숨겨져 있습니다. (일반적으로 SO 질문에서 오프 사이트 리소스에 연결하는 것은 좋지 않습니다. 항상 모든 관련 정보를 질문 자체에 넣으십시오.) – ekhumoro

+0

그 점에 대해 죄송합니다. @ekhumoro, 더 나은 표현을 찾으면 질문을 편집 할 수 있습니다. 누군가가 다른 기본 위젯에 이벤트 필터를 설치하도록 제안하거나 그렇지 않으면 QApplication.postEvent를 통해 수동으로 전파 할 수 있기 때문에 "투명성"노트를 추가해야한다고 느꼈습니다. 지금 질문 수정 중. –

관련 문제