2016-05-06 6 views
1

Ich habe eine Reihe von Objekten auf meinem Bildschirm, dass ich die Opazität ändern, und diese Opazitätsveränderung statt momentaner animierte zu machen, füge ich diese Behavior zu jedem der Objekte:Wie Verhalten Unterklasse in QML

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

Ich versuche, dies zu unterklassifizieren (nicht sicher, ob "Unterklasse" hier der richtige Begriff ist). Ich habe eine Datei FadeBehavior.qml mit diesen Inhalten Namen erstellt:

import QtQuick 2.3 
import QtQuick.Controls 1.3 as Controls 

Behavior on opacity { 

    id: fadeBehavior 

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

} 

Dann anstelle die Behavior jedes Objekt hinzufügen, ich hinzufüge:

FadeBehavior { } 

Aber das funktioniert nicht (sorry I kann keine weiteren Informationen hinzufügen als "nicht funktioniert" - das ist eine geerbte App und ich konnte sie nicht im Debug-Modus ausführen. Wenn ich einen Fehler in meiner QML-Datei mache, passiert nur, dass mein Fenster als angezeigt wird ein leeres 1-Zoll-Quadrat).

Es scheint, als ob die on opacity in der ersten Zeile ist der Teil Qt nicht mag. In FadeBehavior.qmlon opacity ist in rot, Token { erwartet unterstrichen. Gibt es eine andere Syntax zum Angeben des Namens der Eigenschaft, der Behavior zugeordnet ist?

+2

Sie können dies nicht wirklich tun, 'Behaviour' ist ein" spezielles "QML-Element, selbst seine Syntax ist eine Ausnahme im QML-Programmierparadigma. Ich persönlich mag das nicht, besonders das Fehlen einer alternativen Möglichkeit, das Ziel zu spezifizieren. Ich habe festgestellt, dass dies bei vielen Gelegenheiten sehr liming ist. – dtech

Antwort

0

Hier ist eine Arbeit, die funktionieren würde.

Subclass alle Standardtypen, die Sie benötigen (Rectangle, Item, Image, etc.) wie dieses

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

speichern als MyItem.qml und ändern sich jedes Item-MyItem.