2016-04-20 2 views
3

В QML, я пишу компонент следующим образом:метод Алиас в компоненте 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 alias «содействовать» свойства NDDQuickItem к корню компонента. Однако, как показано, в настоящее время я пишу глобально-компонентные методы, которые просто повторно вызовут метод на NDDQuickItem.

Есть ли эквивалент property alias, который работает для методов? Что-то вроде:

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

или

goToSlide = ndd.goToSlide    // not valid QML 

ответ

4

Не используя alias, но вы можете property var v : someId.someFoo, а затем вы можете object.v().

Обратите внимание, что если someFoo() { console.log(this) }, то в someId.someFoo()this будет someId, в то время как в object.v()this будет object. Это не будет проблемой при ссылках на материал в теле функции из-за того, как работает JS, ничего похожего на неправильный this в C++.

Вы также можете использовать сигнал:

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

С дополнительным преимуществом вы можете «перераспределить» это что-то другое, из-за пределов компонента.

Во всяком случае, оба на самом деле не нужно:

В настоящее время я пишу глобальные методы, которые просто повторно вызвать метод на NDDQuickItem.

Это не глобальный, он является членом корневого объекта, и нет ничего плохого в этом, это обычная практика. Я имею в виду, если эффективность является основной задачей, вы не будете писать QML. Кроме того, знайте, что alias не предоставляется бесплатно ни в случае с ints и reals, он занимает примерно столько же места, что и полноценное свойство.

+0

Nice. Интересно отметить, что это «спасибо»! – Phrogz

+0

Вы правы насчет «глобального», я был неаккуратен на своем языке. Я отредактировал его («компонент-глобальный»). Я не так много пытаюсь микро-оптимизировать, поскольку я пытаюсь упростить подписи и передачу аргументов, и более ясно показать, что метод является просто «псевдонимом», а не какой-либо дополнительной функциональностью за пределами прохода. – Phrogz

+0

Все в порядке, как IMO, не более бессмысленно, чем писать функции доступа для частного участника в C++ – dtech

Смежные вопросы