【问题标题】:QQuickView (QML) transparent for mouse eventsQQuickView (QML) 对鼠标事件透明
【发布时间】:2016-11-29 17:44:24
【问题描述】:

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

我已经为所有大的 Rect 添加了一个 MouseArea,试图忽略鼠标事件,但它不起作用。

我读到 'Qt::WA_TransparentForMouseEvents' 用于此目的,但据我所知,在 Qt 窗口中,在我的情况下不可用。

提前致谢

我的 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
    }
}

【问题讨论】:

  • 这似乎与:stackoverflow.com/questions/40833624/… 有关 - Appart 应将 Rectangle 绘制成半透明,并且只有一个 Button 参与
  • 你试图用这个MouseArea做什么,我完全不明白。

标签: qml mouseevent transparent qquickview


【解决方案1】:

Rectangle 默认情况下对鼠标点击是透明的。如果你拿走 MouseAreaButton 将收到点击,而对 Rectangle 的所有点击都将传递给其封闭的父项:

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

在行动:

【讨论】:

  • 感谢您的回复。我理解当您说“矩形上的所有点击都将传递给其封闭的父级”时,但我想这在我的应用程序(同一应用程序的另一部分)中意味着“父级”。在我的情况下,我的应用程序中有这个独立的窗口,我希望我的 RECT 后面的其他 Windows 应用程序在我的 RECT 中单击时接收鼠标事件。是否可以?再次感谢!!
  • 请查看我在您的问题下方的评论中发布的链接。这是一个非常相似的问题。解决方案是,要创建多个窗口,一个将持有您的绿色Rectangle,另一个在您的Button。只有后者处理 MouseEvents。举个例子,只需在顶层ApplicationWindow添加一个绿色的Rectangle
  • @deigo ,我认为你的问题是 QQuickView 本身正在捕捉鼠标点击。如果您提供完整的S.S.C.C.E.,那么也许可以弄清楚。
猜你喜欢
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-04
  • 2014-12-13
  • 2011-12-20
  • 1970-01-01
相关资源
最近更新 更多