6

ここで明らかな何かが欠けているかもしれませんが、Q_ENUM を QML に公開しようとすると、最も単純なケースであっても、QT ドキュメント ( http://doc.qt.nokia.com/4.7 ) に示されているように機能しないようです。-snapshot/qtbinding.html#using-enumerations-of-a-custom-type )

簡単なテスト ケースを作成しました。私の C++ クラスは次のようになります。

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();
};

次に、このクラスのインスタンスを QDeclartiveContext に登録して挿入します。

testVal プロパティにアクセスしようとすると、文字列表現ではなく整数 (この場合は 1) が返されます。さらに、「aVar」として注入されたインスタンスで、「aVar.FirstValue」にアクセスしようとすると、結果は「未定義」になります。

したがって、これは次のようなテストを実行できないことを意味します: 'if aVar.testVal == FirstValue' (未修飾の FirstValue の ReferenceError)

またはこのように: 'if aVar.testVal == aVar.FirstValue'( aVar.FirstValueis undefined)

誰もこれを経験したことがありますか?QTドキュメントで提供されている例と競合しているようですが、その例ではオブジェクトがQMLからインスタンス化されているため、これが原因である可能性があります..

4

1 に答える 1

17

列挙値は、「object.EnumValue」ではなく、「ElementName.EnumValue」としてのみアクセスできます。したがって、aVar.FirstValue は機能しません。代わりに MyClass.FirstValue を使用する必要があります (これを行うには、MyClass を qmlRegisterType() に登録してから、登録されたモジュールをインポートする必要があります)。

また、列挙値は整数値として定義されているため、文字列として返されません。

于 2010-12-17T00:52:52.887 に答える