【发布时间】:2017-11-13 18:29:52
【问题描述】:
在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”,如何删除旧方法并重新定义Component.onCompleted()中的方法?
2017 年 6 月 13 日更新:
谢谢,伙计们。我也使用连接,仍然无法断开连接,因为我使用 qt5.6.1,没有启用属性:(。如果我们使用显式连接()函数,它可以工作。但就我而言,我想我can't connect a method ,我需要检查一些 If 情况来定义是否需要删除 Component.onCompleted 中的信号处理程序。
还有一个小问题,为什么 window 组件的完成速度比 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")
});
}
【问题讨论】: