如何覆盖超类组件的信号处理程序

Gre*_*ade 7 inheritance qt handler qml qt-quick

我有一个基类项目,如下所示:

基础 .qml:

Item {
    Thing {
      id: theThing;

      onMySignal: { console.log("The signal"); }   
     }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试制作一个衍生项目 - Derived.qml.

我怎样才能覆盖onMySignal处理程序theThing?我试过这样的东西......

派生的 .qml:

Base {
    theThing.onMySignal: { console.log("Do different things with theThing in Derived") }
}
Run Code Online (Sandbox Code Playgroud)

但我找不到任何告诉我如何正确地表达这种语法,或者是否/如何真正去做它!

Nej*_*jat 7

您可以将信号处理程序的代码定义为超类中的属性,并在派生项中覆盖它:

Item {
    property var handlerCode: function () { console.log("In Superclass") };

    Thing {
      id: theThing;

      onMySignal: handlerCode() 
     }
}
Run Code Online (Sandbox Code Playgroud)

覆盖:

Base {
    handlerCode: function () { console.log("In Derived Item!") };
}
Run Code Online (Sandbox Code Playgroud)

  • 甚至不添加属性...只需在base中定义一个函数,就可以在具有相同名称的派生函数中创建一个新函数以覆盖它...因此只需在Base中执行onSignal:callBackFunction()并定义基本和所需的派生组件中的简单`callBackFunction()` (3认同)