2016-11-29 10 views
1

У меня есть большой прямоугольник с кнопкой по центру. Я хотел бы, чтобы мой прямоугольник был прозрачным для событий мыши, кроме кнопки, которая должна быть интерактивной. Я имею в виду, что я хотел бы иметь возможность выбирать код под моим прямоугольником с помощью мыши, точно так же, как если бы Rectangle не отображался.QQuickView (QML) прозрачный для событий мыши

Я добавил MouseArea для всех больших Rect, пытаясь игнорировать события мыши, но это не сработает.

Я читал, что для этой цели используется «Qt :: WA_TransparentForMouseEvents», но в Qt-окнах как 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 
    } 
} 
+0

Это кажется связано с: http://stackoverflow.com/questions/40833624/how-to-make-a-true-transparent-window-to-cursor-preferably-on-a-pure-qml-qt - Appart, что 'Прямоугольник' должен быть нарисовано полупрозрачным, и есть только одна кнопка «Button» – 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

Спасибо за ваш ответ. Я понимаю, когда вы говорите: «все клики на Rectangle будут проходить до его охватывающего родителя», но я полагаю, что это означает «родитель» в моем приложении (другая часть того же приложения). В моем случае у меня есть это автономное окно в моем приложении, и я хотел бы, чтобы другие приложения Windows за моим RECT получали события мыши при нажатии на мой RECT. Является ли это возможным? Еще раз спасибо!! – Diego

+0

См. Ссылку, которую я опубликовал в комментарии по вашему вопросу. Это очень похожий вопрос. Решение состоит в том, чтобы создать несколько окон, чтобы у вас был зеленый «Прямоугольник», а другой - на вашей «Button». Только последний передает MouseEvents. Возьмем пример и просто добавим зеленый 'Прямоугольник' в верхний уровень' ApplicationWindow' – derM

+0

@deigo, я думаю, ваша проблема в том, что сам 'QQuickView 'ловит щелчок мышью. Если вы предоставите полный [S.S.C.C.E.] (http://sscce.org/), то, возможно, его можно выяснить. –

 Смежные вопросы

  • Нет связанных вопросов^_^