QFlags和QVariant

时间:2016-04-10 16:41:07

标签: c++ qt qvariant enum-flags qmetatype

我要做的只是在QFlags中存储QVariant

旗帜定义:

class EnumObject : public QObject
{
    Q_OBJECT
public:
    enum DemoFlag {
        SomeFlag0 = 0x00,
        SomeFlag1 = 0x01,
        SomeFlag2 = 0x02
    };
    Q_DECLARE_FLAGS(DemoFlags, DemoFlag)
    Q_FLAG(DemoFlags)
};

现在我所做的就是使用QVariant::fromValue函数构建一个qvariant:

QVariant var = QVariant::fromValue<EnumObject::DemoFlags>(EnumObject::SomeFlag2);
qDebug() << var;

调试输出显示:

QVariant(EnumObject::DemoFlags, )

所以,无论出于何种原因,QVariant似乎都无法存放旗帜?它确实识别出类型,但似乎无法存储该值。我错过了什么?如果我注册枚举,一切正常。

注意:我知道我可以通过将值转换为整数和后面来存储该值,但这对我来说是不可能的,因为QVariant创建是泛型方法的一部分。 / p>

1 个答案:

答案 0 :(得分:0)

实际上它可以节省。但是qDebug()没有显示值。可以看出是否从QVariant中提取了值:

EnumObject::DemoFlags val = var.value<EnumObject::DemoFlags>();

qDebug() << val;

给出:

QFlags<EnumObject::DemoFlags>(SomeFlag2)