2016-04-10 20 views
0

Yapmaya çalıştığım şey, QVariant'da QFlags depolamaktır.QFlags ve QVariant

Bayraklar tanımı:

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

ayıklama çıkışı gösterir:

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

Şimdi tek bütün QVariant::fromValue işlevini kullanarak bir qvariant oluşturmaktır Yani

QVariant(EnumObject::DemoFlags,) 

, Neden olursa olsun QVariant bayrakları saklayamıyor gibi görünüyor? Türü tanır, ancak değeri depolayamıyor gibi görünüyor. Bir şey mi kaçırdım? Bunun yerine bir enum kaydedersem her şey iyi çalışır.

Not: Değeri bir ara ve geri göndererek depolayabildiğimi biliyorum, ancak bu benim için mümkün değil, çünkü QVariant oluşturma genel bir yöntemin parçasıdır.

cevap

0

Aslında kaydeder. Ancak qDebug() için değer gösterilmiyor. değeri QVariant ayıklanır eğer görülebilir:

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

qDebug() << val; 

verir:

QFlags<EnumObject::DemoFlags>(SomeFlag2)