在QML,在某些情况下,我需要删除旧的方法来的信号,并重新定义一个新的方法来处理信号,演示是如下:如何断开方法在QML信号
import QtQuick 2.6
import QtQuick.Window 2.2
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
MouseArea {
id:mouse
anchors.fill: parent
onClicked: {
console.log("11111");
}
}
Text {
text: qsTr("Hello World")
anchors.centerIn: parent
}
Component.onCompleted: {
//if(false){
//}
// mouse.clicked = null;
//mouse.clicked.disconnect();
mouse.clicked.connect(
function(){
console.log("22222")
});
}
}
我连接一个新功能,但它会显示“11111”和“22222”,似乎它增加了一个新的功能来处理信号。
我试过设置“mouse.clicked = null”,仍然不起作用。
我也尝试断开的方法,就像如下:
MouseArea {
id:mouse
anchors.fill: parent
onClicked:say()
}
Component.onCompleted: {
mouse.clicked.disconnect(say);
mouse.clicked.connect(
function(){
console.log("22222")
});
}
function say(){
console.log("11111");
}
不过同时打印“11111”和“22222”,我怎么能删除旧methond和Component.onCompleted重新定义方法( )?
更新于2017年6月13日:
感谢,guys.I也使用连接,仍然不能断开,因为我用qt5.6.1,没有使财产:(如果我们用显式连接。 ()函数,它的工作原理。但对我来说,我觉得我无法连接的方法,我需要检查一些情况下,如果确定我是否需要删除信号处理程序Component.onCompleted。
另外一个快速的问题,为什么窗口组件完成比mouseArea更快?日志“第一次加载”第一次加载。
MouseArea {
id:mouse
anchors.fill: parent
Connections{
onClicked:say()
}
Component.onCompleted: {
//mouse.clicked.connect(say)
console.log("second load")
}
}
Component.onCompleted: {
console.log("first load")
mouse.clicked.connect(
function(){
mouse.clicked.disconnect(say);
//mouse.clicked.disconnect(say);
console.log("22222")
});
}
喜真皮,连接仍然没有按“T工作,我尝试了用Qt5.6.1,没有属性:启用。 – AdvancingEnemy
哦,好的。我没有看到,该属性是在Qt5.7中引入的(http://doc.qt.io/qt-5/qml-qtqml-connections.html#enabled-prop)。 – derM
我给我的代码添加了评论。您可以将'target'设置为'null'以在Qt5.6及更早版本中停用'Connection'。 – derM