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);