【问题标题】:Alias method in QML componentQML 组件中的别名方法
【发布时间】:2016-04-20 15:10:37
【问题描述】:

在 QML 中,我正在编写这样的组件:

import QtQuick 2.0
import NDDQuickItem 1.0

Item {
  property alias source: ndd.nddContentPath

  function goToSlide(component,slide){
    ndd.goToSlide(component,slide);
  }

  NDDQuickItem {
    width: parent.width
    height: parent.height
    id: ndd
  }
}

我可以使用property aliasNDDQuickItem 的属性“提升”到组件的根目录。但是,如图所示,我目前正在编写组件全局方法,这些方法只是重新调用 NDDQuickItem 上的方法。

是否有等效于 property alias 的方法适用于方法?比如:

method alias goToSlide: ndd.goToSlide // not valid QML

goToSlide = ndd.goToSlide             // not valid QML

【问题讨论】:

    标签: qt qml


    【解决方案1】:

    不使用alias,但你可以property var v : someId.someFoo,然后你可以object.v()

    请注意,如果someFoo() { console.log(this) },则someId.someFoo() 中的this 将为someId,而object.v() 中的this 将为object。由于 JS 的工作方式,在引用函数体中的内容时这不会成为问题,与 C++ 中的错误 this 完全不同。

    你也可以使用信号:

    signal goToSlide(var component,int slide)
    onGoToSlide: ndd.goToSlide(component,slide)
    

    有了额外的好处,您可以从组件外部将其“重新映射”到其他东西。

    无论如何,两者都不是必需的:

    我目前正在编写仅在 NDDQuickItem。

    它不是全局的,它是根对象的成员,这样做并没有错,这是常见的做法。我的意思是,如果效率是首要考虑因素,那么您就不会编写 QML。另外,要知道alias 也不是免费提供的,在整数和实数的情况下,它占用的空间与完整的属性几乎相同。

    【讨论】:

    • 不错。关于this 范围的有趣说明,谢谢!
    • 你说的“全球”是对的,我的语言很草率。我已经编辑了它(“组件全局”)。我不是在尝试进行微优化,而是在尝试简化签名和参数传递,并且更清楚地表明该方法只是一个“别名”,而不是传递之外的任何额外功能。
    • 像 IMO 一样没关系,没有比在 C++ 中为私有成员编写访问器函数更荒谬
    猜你喜欢
    • 1970-01-01
    • 2018-06-05
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多