Domanda

potrei mancare qualcosa di ovvio qui, ma quando si cerca di esporre un Q_ENUM a QML, anche nel caso più semplice, non sembra al lavoro, come indicato nella documentazione di QT ( http://doc.qt.nokia.com/4.7-snapshot/qtbinding .html # utilizzando-enumerazioni-di-un-custom-tipo )

Ho creato un semplice caso di test, i miei sguardi C ++ classe come:

class MyClass : public QDeclarativeItem {
    Q_OBJECT
    Q_ENUMS(testType)

public:
    MyClass() : t(FirstValue) {  }
    enum testType { InvalidValue, FirstValue, SecondValue } ;

    testType testVal() const { return t; }
    Q_PROPERTY(testType testVal READ testVal NOTIFY testValChanged)
private:
    testType t;

signals:
    void testValChanged();
};

I quindi registrare & Iniettare un'istanza di questa classe nel QDeclartiveContext.

Quando provo e l'accesso alla proprietà testVal, restituisce il numero intero (1 in questo caso), piuttosto che una rappresentazione di stringa. Inoltre, con l'istanza iniettata come 'Avar', se provo e accesso 'aVar.FirstValue', il risultato è 'definito'

Quindi questo significa che non posso fare i test come: 'if aVar.testVal == FirstValue' (ReferenceError per la FirstValue qualificato)

O come questa: 'if aVar.testVal == aVar.FirstValue' (aVar.FirstValue è indefinito)

Chiunque stato attraverso questo prima? Sembra di conflitto con l'esempio fornito nella documentazione QT, anche se l'oggetto viene istanziato da QML in questo esempio, quindi questo potrebbe essere la causa ..

È stato utile?

Soluzione

I valori Enum è accessibile solo come "ElementName.EnumValue", non "object.EnumValue". Quindi, aVar.FirstValue non funziona; avrete bisogno di utilizzare MyClass.FirstValue invece (e per fare questo, è necessario registrarsi con MyClass qmlRegisterType () e poi importare il modulo registrati).

Inoltre, i valori enum non restituiti come stringhe in quanto essi sono definiti come valori interi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top