在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