2016-11-29 93 views
1

私はボタンが中央にある大きな四角形を持っています。ボタンを除いて、マウスイベントにトランスペアレントであり、クリック可能でなければなりません。つまり、矩形が表示されていない場合とまったく同じように、マウスで矩形下のコードを選択できるようにしたいと考えています。QQuickView(QML)はマウスイベントを透過します

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

: http://stackoverflow.com/questions/40833624/how-to-make-a-true-transparent-window-to-cursor-preferably-on-a-pure-qml-qt - 「Rectangle」を指定する必要があります。半透明で描画され、ボタンが1つしかありません – derM

+0

そして、この 'MouseArea'を使って何をしようとしているのですか?取得しないでください。 – derM

答えて

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

:これはに関連しているようだ

enter image description here

+0

ご返信ありがとうございます。私はあなたが "四角形のすべてのクリックがその囲む親に渡される"と言うとき、私のアプリケーション(同じアプリの別の部分)で '親'を意味すると思います。私の場合は、アプリケーションにこのスタンドアロンのウィンドウがあり、私のRECTの背後にある他のWindowsアプリケーションは、私のRECTでクリックするとマウスイベントを受け取るようにしたいと思います。出来ますか?再度、感謝します!! – Diego

+0

あなたの質問の下のコメントに投稿したリンクをご覧ください。これは全く同じ問題です。解決策は、複数のウィンドウを作成するために、緑色の「長方形」と別の「ボタン」を保持する方法でした。後者のみMouseEventsをハンドリングします。例を見て、トップレベルの 'ApplicationWindow'に緑の' Rectangle'を追加してください。 – derM

+0

@deigo、あなたの問題は 'QQuickView'自体がマウスクリックを捕まえていると思います。あなたが完全な[S.S.C.C.E.](http://sscce.org/)を提供すれば、おそらくそれを理解することができます。 –

関連する問題