Zusammenfassung: Wie kann ich ein Symbol neben Text, ohne Hardcoding-Dimensionen, und wickeln Sie die beiden in einer MouseArea
... in einem wie funktioniert das in einem GridLayout
?MouseArea über eine QML-Zeile (oder Auto-Sizing Bild + Text)
Ich habe ein QML-Layout erstellt, das Zeilen von Etiketten über tappable "Schaltflächen" hat. Die Tasten sind ein Symbol zusammen mit dem Text:
Um die Tasten erstelle ich ein verwende, so dass die beiden Elemente zusammen richtig halten (ohne hartcodierte Dimensionen) und verfügt über eine automatische Größe, dass die GridLayout
kann verwenden:
GridLayout {
columns:2; rowSpacing:30
Text {
text: audioServer.label
Layout.alignment: Qt.AlignLeft
}
Row {
spacing:10; Layout.alignment:Qt.AlignRight
Image { width:29; height:30; y:10; source:"qrc:/rescan.png" }
Text { text:"Find Another" }
}
Text {
text: "System uptime "+system.uptime
Layout.alignment: Qt.AlignLeft
}
Row {
spacing:10; Layout.alignment:Qt.AlignRight
Image { width:29; height:30; y:10; source:"qrc:/restart.png" }
Text { text: "Restart" }
}
}
Ich möchte eine MouseArea
um jede Schaltfläche setzen. Wenn ich es in einer Reihe gelegt, so ...
Row {
Image { width:29; height:30; y:10; source:"qrc:/rescan.png" }
Text { text:"Find Another" }
MouseArea {
anchors.fill: parent
onClicked: rescan()
}
}
... dann bekomme ich den (vernünftigen) Fehler QML Row: Cannot specify left, right, horizontalCenter, fill or centerIn anchors for items inside Row. Row will not function.
Und was noch wichtiger ist, die Layout-Pausen (ich glaube, die Zeile Null Breite bekommt, so das Gridlayout hat es die rechte Seite abfließen.)
ich kann den MouseArea
außerhalb der GridLayout
wie diese bewegt ...
GridLayout {
...
Row {
id: rescanButton
Image { width:29; height:30; y:10; source:"qrc:/rescan.png" }
Text { text:"Find Another" }
}
}
MouseArea {
anchors.fill: rescanButton
onClicked: rescan()
}
... weil man nur auf Geschwister oder Eltern verankern kann.
Aber ich kann nicht die MouseArea
innerhalb der GridLayout
setzen, denn dann wird es versuchen, es als ein Element zu legen.
Wie bekomme ich eine MouseArea, die die Schaltflächen umschließt?
Es ist akzeptabel für mich, einen anderen Container als zu verwenden, aber ich bevorzuge es, keine Text- oder Containerabmessungen fest zu codieren.
Warum gehst du nicht einfach machen das 'ein Kind des' Image' MouseArea'? –
Ein schrecklicher Hack ist, dass Sie die 'MouseArea' als Kind des' GridLayout' setzen können; es wird eine leere Zelle dafür übriglassen, aber die Verwendung von 'anchors.fill: myButton' wird dazu führen, dass die Tap-Region korrekt um die Schaltfläche herum angeordnet ist. Sie müssen nur die gesamte MouseArea am Anfang oder Ende des GridLayouts platzieren, so dass sie keine Löcher in der Mitte hinterlassen. – Phrogz
@FilipHazubski Weil ich möchte, dass der Benutzer irgendwo auf dem Bild tippen kann ** oder ** den Text, der dazu gehört. Die "rescan.png" ist nur die eingekreisten Pfeile, aber der Benutzer sollte auch in der Lage sein, auf "Find Another" zu tippen und es funktionieren zu lassen. – Phrogz