qt – 如何将“this”从QML元素传递给JS函数

前端之家收集整理的这篇文章主要介绍了qt – 如何将“this”从QML元素传递给JS函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
与C中的this关键字类似,我想要有一个QML元素将自己传递给JS函数,或者让它在另一个元素上设置属性.这可能吗?

例如:

Rectangle{
id:theParent

property var theElement

SomeElement{
id:theChild
   MouseArea {
        anchors.fill:parent
        onClicked: {
            someJsFunction(*whatGoesHere*)
            parent.theElement=*whatGoesHere*
        }
    }

或者,考虑一下:

Rectangle{
id:theParent

property var theElement

SomeElement{
id:theChild
    }

然后,在SomeElement.qml中:

Rectangle{
   MouseArea {
        anchors.fill:parent
        onClicked: {
            someJsFunction(*whatGoesHere*)
            parent.theElement=*whatGoesHere*
        }
}
}

在这种情况下,* whatGoesHere *将是调用它们的SomeElement的实例.

这在QML中是否可行?我认为id属性是有意义的,但根据文档,你不能查询id字段的值,无论如何,如果我的SomeElement在一个单独的文件中描述,并且上面的whatGoesHere处理,则id将不可用出现在该单独的文件中而不是在特定的实例中.

解决方法

我有两个补充建议:

首先,对于单次使用,传递ID,因为它基本上是指向项目的指针:

MouseArea {
    id: myClicker;
    onClicked: { callFunc (myClicker); }
}

然后,如果您需要多个项目来共享此行为,这意味着您正在使用MVC,因此ID将完全相同:

Repeater {
    model: 100;
    delegate: MouseArea {
         id: myClicker;
         onClicked: { callFunc (myClicker); }
    }
}

这是经典部分.

但是如果你创建自己的组件要更好,那么请记住创建一个“自我”帮助属性来正确执行’this’工作:

MouseArea { // component root definition
    id: base;

    property var self : base; // bind self on the I
}

然后像这样使用它:

Repeater {
    model: 100;
    delegate: MyComponent {
         onClicked: { callFunc (self); }
    }
}

根据需要随时使用!

猜你在找的JavaScript相关文章