如何拦截和传播重叠小部件中的事件

时间:2014-12-06 12:11:38

标签: python qt pyqt qml pyside

我希望拦截位于另一个小部件顶部的小部件中的事件,而不会消耗它。

这是我到目前为止所得到的。当点击重叠的部分时,我希望它能打印出#Hello; Hello World",但我得到的只是"你好"。

image

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_()

以下是QML中的一个例子,可以帮助我完成我想要的工作。

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;
            }
        }
    }
}

单击窗口会产生" World"而单击绿色矩形会产生" Hello"其次是" World"。这里的关键是propagateComposedEvents

1 个答案:

答案 0 :(得分:0)

window attribute可以满足您的需求:

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