2016-05-06 2 views
1

У меня есть ряд объектов на моем экране, что я изменить непрозрачность, и сделать это изменение непрозрачности анимированный вместо мгновенного, я добавить Behavior к каждому из объектов:Как подкласс поведения в QML

Behavior on opacity { 
    NumberAnimation { 
     duration: 500 
     easing.type: Easing.InOutQuad 
    } 
} 

Я пытаюсь подклассифицировать это (не уверен, что «подкласс» является правильным термином здесь). Я создал файл с именем FadeBehavior.qml с этим содержимым:

import QtQuick 2.3 
import QtQuick.Controls 1.3 as Controls 

Behavior on opacity { 

    id: fadeBehavior 

    NumberAnimation { 
     duration: 500 
     easing.type: Easing.InOutQuad 
    } 

} 

Затем, вместо добавления Behavior к каждому объекту, я добавляю:

FadeBehavior { } 

Но это не работает (жаль, что я не может добавить больше информации, чем «не работает» - это унаследованное приложение, и я не смог запустить его в режиме отладки, когда я ошибаюсь в своем файле QML, все, что происходит, это то, что мое окно появляется как пустой квадратный дюйм).

Кажется, что on opacity в первой строке - это часть Qt не нравится. В FadeBehavior.qmlon opacity подчеркивается красным, ожидая токена {. Есть ли другой синтаксис для указания имени свойства, к которому привязан Behavior?

+2

Вы не можете этого сделать, 'Behavior' является« специальным »элементом QML, даже его синтаксис является исключением в парадигме языка QML. Мне лично это не нравится, особенно отсутствие альтернативного способа определения цели, я обнаружил, что это очень часто известкование. – dtech

ответ

0

Вот одна работа вокруг, которая будет работать.

Подкласс всех стандартных типов, которые вам нужны (Rectangle, Item, Image и т.д.), как этот

Item { 
    Behavior on opacity { 
     NumberAnimation { 
      duration: 500 
      easing.type: Easing.InOutQuad 
     } 
    } 
} 

Сохранить как MyItem.qml и меняются каждый Item к MyItem.