从同名的后代方法调用 QML 祖先方法

Posted

技术标签:

【中文标题】从同名的后代方法调用 QML 祖先方法【英文标题】:Calling QML ancestor method from descendant method of same name 【发布时间】:2020-08-12 20:30:05 【问题描述】:

我正在尝试改进 QML 中包含的 SoundEffect 类。我的新“MySoundEffect.qml”如下所示。但是,我无法弄清楚如何从我自己的方法中调用 SoundEffect 类的同名“播放”方法。我在下面的尝试失败了:

import QtQuick 2.0
import QtMultimedia 5.12

SoundEffect 
    function play() 
        console.log("Play clicked in my sound effect")
        SoundEffect.play()
    

显而易见的答案是为我的方法选择一个新名称,但我希望有一种方法可以实现这一点。

【问题讨论】:

这已经被问过了(例如here)。不幸的是,QML 不支持该功能,尽管它确实很有用。如果您想要一个调用另一个,您将需要您的派生对象函数使用与基对象函数不同的名称。 【参考方案1】:

JarMan 链接的答案 - 回答了我问的为什么不可能。但是,包装祖先类也可以让我对程序的其余部分透明地进行更改:

import QtQuick 2.0
import QtMultimedia 5.12

Item 
    property alias source  : effect.source
    property alias loops : effect.loops
    property alias volume : effect.volume
    property alias muted : effect.muted
    
    SoundEffect 
        id: effect
    
    
    function play() 
        effect.play()
    

【讨论】:

以上是关于从同名的后代方法调用 QML 祖先方法的主要内容,如果未能解决你的问题,请参考以下文章

python多继承中子类访问祖先类的同名成员

遍历祖先同胞后代

从 QML ListView 委托调用 JavaScript 对象方法

如何从封闭的外部类调用与匿名类中实现的方法同名的方法?

如何找到具有某个标签的后代叶节点的最低祖先?

在 QML Javascript 中调用 QCursor::setPos