4

作成した QFlag があります。この QFlag を QML で使用したいと思います。具体的には、いくつかのフラグを OR して、パラメーターとしてメソッドに渡すことができるようにしたいと考えています。

QFlags は、QML でサポートされているデータ型としてここに明示的にリストされていないことに気付きました: http://doc.qt.nokia.com/4.7-snapshot/qtbinding.html#supported-data-types

この機能を有効にするには、どのタイプを登録する必要がありますか、または Q_MACRO を使用する必要がありますか?

目標は、次のような QML で使用できるメソッド呼び出しを作成することです。

    myObject.setFlag(MyFlagType.A | MyFlagType.C)

私のQFlagコード:

#include <QFlags>
#include <QObject>
class ColorPickerStyle : public QObject {
Q_OBJECT
public:
enum ColorPickerStyleFlag {
    None 0x00,
    MSOfficeColors = 0x01,
    RGBSlider = 0x02,
    ColorWheel = 0x04,
    CustomColorSet = 0x08
};
//Create ColorPickerStyle::Flags as a type
Q_DECLARE_FLAGS(Flags, ColorPickerStyleFlag)
//Register ColorPickerStyle::Flags with the meta-type system
Q_FLAGS(Flags)
Q_ENUMS(ColorPickerStyleFlag)

ColorPickerStyle();
virtual ~ColorPickerStyle();
};

//Qt requires lots of macros
Q_DECLARE_OPERATORS_FOR_FLAGS(ColorPickerStyle::Flags)
4

1 に答える 1

4

追加宣言

Q_ENUMS(ColorPickerStyleFlag)

十分なはずです。列挙型は整数であるため、or 演算子は QML の Q_FLAGS 宣言がなくても機能します。

クラス ColorPickerStyle には、メタ オブジェクト コンパイラが正しく機能するように、Q_OBJECT マクロも必要です。

最後に、QML の値を ColorPickerStyle.None、ColorPickerStyle.MSOfficeColors などとして使用できます。

于 2012-07-14T13:30:25.273 に答える