1
我的課有枚舉屬性,我希望訪問此屬性使用QObject*
。當調用QVariant QObject::property (const char * name) const
返回值爲枚舉類型的空QVariant
。對象::屬性(常量字符*名稱)常量返回空QVariant
考慮下面的代碼:
/* Interface class */
class IFoo
{
Q_GADGET
public:
Q_ENUMS(ColorType)
typedef enum
{
COLOR_RED = 0,
COLOR_BLUE
} ColorType;
virtual QString Name(void) const = 0;
};
Q_DECLARE_METATYPE(IFoo::ColorType)
class Foo
: public IFoo
{
Q_OBJECT
public:
Foo(void)
{
qint32 typeId = qRegisterMetaType<IFoo::ColorType>("ColorType");
qRegisterMetaTypeStreamOperators<int>(IFoo::ColorType);
}
virtual QString Name(void) const { return _name; }
void SetColor(ColorType color) { _color = color; }
ColorType Color(void) const { return _color; }
QString ColorString(void) const { return _color == IFoo::COLOR_RED ? "Red" : "Blue"; }
Q_PROPERTY(IFoo::ColorType Color READ Color WRITE SetColor)
Q_PROPERTY(QString ColorString READ ColorString)
private:
ColorType _color;
QString _name;
};
int main (int argc, char **argv) {
QCoreApplication app(argc, argv);
Foo f;
f.SetColor(IFoo::COLOR_RED);
qDebug() << f.property("Color"); // Returns QVariant(IFoo::ColorType,)
qDebug() << f.property("ColorString"); // Returns QString(Red)
}
爲什麼返還財產空的QVariant值?字符串包裝屬性按其應有的方式工作。
它真的是空的嗎?你有沒有嘗試過調用QVariant :: value()?另外,你有沒有嘗試過使用Q_DECLARE_METATYPE? –
似乎你是對的.. QVariant ::值()返回正確的int值。不幸的是,這並沒有多大幫助,或者從QVariant獲取枚舉類型並將其插入QVariant :: value ()? –
krizajb
你是什麼意思? QVariant :: value()已經返回枚舉類型。 –