1

ボタンが中央にある大きな長方形があります。クリック可能でなければならないボタンを除いて、私の四角形がマウスイベントに対して透過的であることを望みます。つまり、長方形が表示されていないかのように、長方形の下のコードをマウスで選択できるようにしたいと考えています。

マウス イベントを無視しようとして、すべての大きな 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
    }
}
4

1 に答える 1

0

Rectangle、デフォルトでマウス クリックに対して透過的です。それを取り除くとMouseArea、 はButtonクリックを受け取り、 のすべてのクリックは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}
    }
}

実際に:

ここに画像の説明を入力

于 2016-11-30T00:07:21.860 に答える