QFlags 和 QVariant

Posted

技术标签:

【中文标题】QFlags 和 QVariant【英文标题】:QFlags and QVariant 【发布时间】:2016-04-10 16:41:07 【问题描述】:

我想要做的只是将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 创建是泛型方法的一部分。

【问题讨论】:

【参考方案1】:

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

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

qDebug() << val;

给予:

QFlags<EnumObject::DemoFlags>(SomeFlag2)

【讨论】:

以上是关于QFlags 和 QVariant的主要内容,如果未能解决你的问题,请参考以下文章

访问模型中dropActions的值(PySide / PyQt / Qt)

C++中标志位的几种实现方法

& 和 && 区别和联系,| 和 || 区别和联系

第三十一节:扫盲并发和并行同步和异步进程和线程阻塞和非阻塞响应和吞吐等

shell中$()和 ` `${}${!}${#}$[] 和$(()),[ ] 和(( ))和 [[ ]]

Java基础8---面向对象代码块和继承和this和super和重写和重载和final