Ich habe mehrere ähnliche Fragen zu diesem Thema gefunden, aber noch nicht eine funktionierende Lösung zusammengefügt. Ich habe nicht-rechteckige Qt Quick Images, jedes mit einem Kind MouseArea. Das aktuelle onClicked-Ereignis registriert Klicks des übergeordneten Bilds in Transparenzbereichen, die ich gerne ignorieren würde. Gibt es dafür eine QML-Lösung? Wäre eine QML-only-Lösung zu empfehlen oder sollte die Transparenzbestimmung in C++ erfolgen?Ignore MouseArea onClicked-Ereignis für transparente Bereiche von übergeordneten Qt Quick Image
Pseudocode in der main.qml Datei:
Image {
id: testImage
x: 200
y: 100
width: 100
height: 150
fillMode: Image.PreserveAspectFit
source: "TestImage.svg"
MouseArea {
id: testMouseArea
anchors.fill: parent
onClicked: {
//if alpha of (mouseX, mouseY) > 0 {
//DO STUFF
//}
}
}
}
Mein Verständnis ist, dass getImageData() wird für diesen Zweck nicht funktionieren, so kann es nicht möglich sein, die Alpha-Ebene des Mutterbildes zu bestimmen, bei die (mouseX, mouseY) Koordinaten in QML direkt.
Bitte schauen Sie sich Qt doc an. [void QEvent :: ignore()] (http://doc.qt.io/qt-5/qevent.html#ignore). Wenn ich mich recht erinnere, wird ein ignoriertes Ereignis an den nächsten möglichen Empfänger, d. H. Das nächste Widget, gemäß der Stapelreihenfolge z. das übergeordnete Widget – Scheff
Haben Sie einen echten Code, in dem Sie einige der Lösungen im Internet ausprobiert haben? Eine vielversprechende Lösung finden Sie hier: https://stackoverflow.com/questions/38164074/how-to-create-a-round-mouse-area-in-qml (dh zweite Antwort) – derM
Ich denke, das ist nur möglich durch Implementierung von benutzerdefiniertem 'QQuickitem'-Item. – folibis