2017-03-10 15 views
1

Background.qmlPflanzgut onPositionChanged Veranstaltungen Hintergrundelemente in QtQuick 1.1

import QtQuick 1.1 

Item { 
    MouseArea { 
     id: backgroundMouseArea 
     anchors.fill: parent 
     hoverEnabled: true 

     onPositionChanged: { 
      console.log("Background") 
     } 
    } 
} 

Foreground.qml

import QtQuick 1.1 

Item { 
    Background { 
     width: 1920 
     height: 1080 
    } 

    MouseArea { 
     anchors.fill: parent 
     hoverEnabled: true 

     onPositionChanged: { 
      console.log("Foreground") 
      [mouse.accepted = false] - Not working (as the docs say) 
      [backgroundMouseArea.onPositionChanged(mouse)] - Not working 
     } 
    } 
} 

Ich brauche beide onPositionChanged Ereignis auszuführen auf den Hintergrund und Vordergrund Elemente.

F.ex. für onPressed Ich würde es tun, indem Sie mouse.accepted = false im Vordergrund Element festlegen.

Kann ich onPositionChanged des Hintergrundelements manuell aufrufen? Wenn ja, wie mache ich das?

Antwort

1

Ich bin mir nicht ganz sicher, was Sie hier erreichen wollen. Ein MouseArea soll Mausereignisse von der Hardware erfassen. Wenn Sie Mausereignisse wirklich von einem anderen MouseArea zum Hintergrund propagieren möchten, geben Sie vielleicht Background ein einfaches property mousePosition anstelle des MouseArea, und legen Sie dann diese Position aus dem Foreground onPositionChanged-Handler fest.

Auch Ihr Foreground-Code basiert auf einem internen id Parameter im Hintergrund. Das riecht wirklich schlecht. Es ist oft sinnvoller, über die "öffentliche API" der Klassen "Background" und "Foreground" nachzudenken. Wenn das, was ich oben beschrieben ist wirklich das, was Sie tun wollen, ist dies, wie es meiner Meinung nach aussehen sollte:

// Background.qml 
import QtQuick 1.1 
Rectangle { 
    // an object with just x and y properties 
    // or the complete mouseevent, whatever you want 
    // Use variant for QtQuick 1/Qt4, var for QtQuick 2.0/Qt5 
    property variant mousePosition 
    onMousePositionChanged: console.log(
     "Background " + mousePosition.x + " " + mousePosition.y 
    ) 
} 

//Foreground.qml 
import QtQuick 1.1 
Item { 
    // use only ids defined in the same file 
    // else, someone might change it and not know you use it 
    Background { id: background } 
    MouseArea { 
    anchors.fill: parent 
    hoverEnabled: true 

    onPositionChanged: { 
     console.log("Foreground") 
     background.mousePosition = {x: mouse.x, y: mouse.y} 
    } 
    } 
} 

...........