
Ist es möglich, die Aktion eines Elements (z. B. onTriggered() eines Timers) innerhalb von onClick() einer Schaltfläche zu überschreiben?
Irgendwas in der Art->
Button {
id: centerBtn
objectName: "button"
onClicked: {
delaytimer.running = true;
delayTimer.onTriggered {}; // override here
}
Timer {
id: delaytimer
interval: 1000
running: false
repeat: false
onTriggered: //something implemented here
}
}
Antwort1
Sie können eine Eigenschaft definieren, um den Code des Signalhandlers zu speichern und ihn bei Bedarf neu zuzuweisen:
Sehen Sie sich den folgenden Codeausschnitt an:
import QtQuick 2.0
import Ubuntu.Components 0.1
Rectangle {
width: 200
height: 150
Button {
id: foo
text: "Foo"
onClicked: {
delaytimer.a = function () { console.log("Foo!") };
delaytimer.running = true;
}
}
Button {
id: bar
text: "Bar"
anchors.left: foo.right
onClicked: {
delaytimer.a = function () { console.log("Bar!") };
delaytimer.running = true;
}
}
Timer {
id: delaytimer
interval: 1000
running: false
repeat: false
property var a: function () { console.log("will be overridden!") };
onTriggered: a()
}
}