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