QML - 带有默认参数的信号
QML - Signal with Default Arguments
我看到以下信号声明给出了语法错误:
signal mySignal(int x, int y = 0)
有没有办法用默认参数定义信号?如果不是,您建议采用什么解决方法?
我可以定义两个不同的信号,但这并不理想,因为我正在加载具有该信号的组件(通过具有与信号定义相同的基本组件),并希望保持我的信号处理程序代码多态。否则我想我必须添加一个 属性 来确定信号签名,这样我才能处理我的 Connections
class:
中的所有签名
Connections {
target: myLoader.item
function onMySignal1stSignature(x) {
if (myLoader.item.signalType === 1) ...
}
function onMySignal2ndSignature(x, y) {
if (myLoader.item.signalType === 2) ...
}
}
这显然是丑陋和可怕的。
你可以用两个参数定义一个信号,但仍然只传递一个。
signal mySignal(int x, int y)
function someFunction() {
mySignal(3);
}
然后在您的插槽中,检查 undefined
:
Connections {
target: myLoader.item
function onMySignal(x, y) {
if (y === undefined) {
y = 0;
}
...
}
}
更新:
对不起,我错了。您不能跳过信号中的参数,但可以跳过 javascript 函数的参数。因此,您可以将信号包装在函数调用中,如下所示:
signal mySignal(int x, int y)
function emitMySignal(x, y) {
if (y === undefined) {
y = 0;
}
mySignal(x, y)
}
这样调用就可以了。 (我试过了!):
emitMySignal(3);
我看到以下信号声明给出了语法错误:
signal mySignal(int x, int y = 0)
有没有办法用默认参数定义信号?如果不是,您建议采用什么解决方法?
我可以定义两个不同的信号,但这并不理想,因为我正在加载具有该信号的组件(通过具有与信号定义相同的基本组件),并希望保持我的信号处理程序代码多态。否则我想我必须添加一个 属性 来确定信号签名,这样我才能处理我的 Connections
class:
Connections {
target: myLoader.item
function onMySignal1stSignature(x) {
if (myLoader.item.signalType === 1) ...
}
function onMySignal2ndSignature(x, y) {
if (myLoader.item.signalType === 2) ...
}
}
这显然是丑陋和可怕的。
你可以用两个参数定义一个信号,但仍然只传递一个。
signal mySignal(int x, int y)
function someFunction() {
mySignal(3);
}
然后在您的插槽中,检查 undefined
:
Connections {
target: myLoader.item
function onMySignal(x, y) {
if (y === undefined) {
y = 0;
}
...
}
}
更新:
对不起,我错了。您不能跳过信号中的参数,但可以跳过 javascript 函数的参数。因此,您可以将信号包装在函数调用中,如下所示:
signal mySignal(int x, int y)
function emitMySignal(x, y) {
if (y === undefined) {
y = 0;
}
mySignal(x, y)
}
这样调用就可以了。 (我试过了!):
emitMySignal(3);