QQuickView(QML)对鼠标事件透明

QQuickView(QML)对鼠标事件透明,qml,mouseevent,transparent,qquickview,Qml,Mouseevent,Transparent,Qquickview,我有一个大矩形,中间有一个按钮。我想我的矩形是透明的鼠标事件,除了按钮,它必须是可点击的。我的意思是,我希望能够用鼠标选择矩形下的代码,就像没有显示矩形一样 我为所有大矩形添加了一个MouseArea,试图忽略鼠标事件,但它不起作用 我读到'Qt::WA_TransparentForMouseEvents'用于此目的,但据我所知,在Qt-windows中,fasr不适用于我的情况 提前谢谢 我的QML是从main.cpp加载的: QQuickView* pView = new QQuick

我有一个大矩形,中间有一个按钮。我想我的矩形是透明的鼠标事件,除了按钮,它必须是可点击的。我的意思是,我希望能够用鼠标选择矩形下的代码,就像没有显示矩形一样

我为所有大矩形添加了一个MouseArea,试图忽略鼠标事件,但它不起作用

我读到'Qt::WA_TransparentForMouseEvents'用于此目的,但据我所知,在Qt-windows中,fasr不适用于我的情况

提前谢谢

我的QML是从main.cpp加载的:

   QQuickView* pView = new QQuickView();

    pView->setSource(QUrl("qrc:/MyRect.qml"));
    pView->setFlags(Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
    pView->setColor("transparent");
    pView->show();
MyRect.qml:

import QtQuick 2.0
import QtQuick.Controls 1.4

Rectangle {
    width: 500
    height: 500

    color: "green" // it would be transparent
    opacity: 0.5

    Button {
        anchors.centerIn: parent
        height: 50; width: 50
        onClicked: console.log("clicked");
    }

    MouseArea {
        anchors.fill: parent
        enabled: false
        propagateComposedEvents: true
        hoverEnabled: false

        // All this code I think is useless...
        onClicked: mouse.accepted = false
        onReleased: mouse.accepted = false
        onEntered: mouse.accepted = false
        onExited:  mouse.accepted = false
        onWheel:  mouse.accepted = false
    }
}

默认情况下,
矩形
对鼠标单击是透明的。如果去掉该
MouseArea
,则
按钮将收到单击,并且在
矩形上的所有单击将传递到其封闭的父对象:

import QtQuick.Window 2.2
import QtQuick.Dialogs 1.2
import QtQuick 2.7
import QtQuick.Controls 1.5
import QtQuick.Controls.Styles 1.4
import QtQuick.Layouts 1.3


ApplicationWindow {
    width: 200; height: 150; visible: true
    property string status;

    ColumnLayout {
      Rectangle {
        width:100;height:100;

        MouseArea {
            anchors.fill: parent
            onClicked: status = "Enclosing Rectangle Clicked";    
        }

        Rectangle {
            width: 75
            height: 75
            color: "green" // it would be transparent
            opacity: 0.5
            Button {
                anchors.centerIn: parent
                height: 25; width: 25
                onClicked: status = "Button clicked";
            }
        }
      }
      Text{ text: status}
    }
}
在行动中:


默认情况下,
矩形对鼠标单击是透明的。如果去掉该
MouseArea
,则
按钮将收到单击,并且在
矩形上的所有单击将传递到其封闭的父对象:

import QtQuick.Window 2.2
import QtQuick.Dialogs 1.2
import QtQuick 2.7
import QtQuick.Controls 1.5
import QtQuick.Controls.Styles 1.4
import QtQuick.Layouts 1.3


ApplicationWindow {
    width: 200; height: 150; visible: true
    property string status;

    ColumnLayout {
      Rectangle {
        width:100;height:100;

        MouseArea {
            anchors.fill: parent
            onClicked: status = "Enclosing Rectangle Clicked";    
        }

        Rectangle {
            width: 75
            height: 75
            color: "green" // it would be transparent
            opacity: 0.5
            Button {
                anchors.centerIn: parent
                height: 25; width: 25
                onClicked: status = "Button clicked";
            }
        }
      }
      Text{ text: status}
    }
}
在行动中:


这似乎与:-表明
矩形
应绘制为半透明,并且只涉及一个
按钮
,而您试图使用此
鼠标执行的操作a
,我完全不明白。这似乎与:-表明
矩形
应绘制为半透明,而且只涉及一个
按钮
,您想用这个
鼠标做什么我完全不明白。谢谢您的回复。我理解你所说的“所有对矩形的点击都会传递到其封闭的父对象”,但我想它在我的应用程序(同一应用程序的另一部分)中的意思是“父对象”。在我的例子中,我的应用程序中有这个独立的窗口,我希望我的RECT后面的其他Windows应用程序在我的RECT中单击时接收鼠标事件。可能吗?再次感谢!!请查看我在您的问题下的评论中发布的链接。这是一个非常相似的问题。解决方案是,要创建多个窗口,一个将保持绿色的
矩形
,另一个将保持绿色的
按钮
。只有后者会处理鼠标事件。举个例子,只需在顶级的
应用程序窗口
@deigo中添加一个绿色的
矩形
,我认为您的问题在于
QQuickView
本身正在捕捉鼠标点击。如果你提供了一个完整的答案,那么也许它可以被计算出来。谢谢你的回复。我理解你所说的“所有对矩形的点击都会传递到其封闭的父对象”,但我想它在我的应用程序(同一应用程序的另一部分)中的意思是“父对象”。在我的例子中,我的应用程序中有这个独立的窗口,我希望我的RECT后面的其他Windows应用程序在我的RECT中单击时接收鼠标事件。可能吗?再次感谢!!请查看我在您的问题下的评论中发布的链接。这是一个非常相似的问题。解决方案是,要创建多个窗口,一个将保持绿色的
矩形
,另一个将保持绿色的
按钮
。只有后者会处理鼠标事件。举个例子,只需在顶级的
应用程序窗口
@deigo中添加一个绿色的
矩形
,我认为您的问题在于
QQuickView
本身正在捕捉鼠标点击。如果你能提供一个完整的答案,那么也许你能找到答案。