То, что я пытаюсь сделать, это просто сохранить 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, используя QVariant::fromValue
функция:
QVariant var = QVariant::fromValue<EnumObject::DemoFlags>(EnumObject::SomeFlag2);
qDebug() << var;
Отладочный вывод показывает:
QVariant(EnumObject::DemoFlags, )
Итак, по какой причине QVariant не может хранить флаги? Он распознает тип, но, похоже, не может сохранить значение. Я что-то пропустил? Если я зарегистрирую перечисление, все будет работать нормально.
Замечания: Я знаю, что могу сохранить значение, приведя его к целому числу и обратно, но для меня это невозможно, поскольку создание QVariant является частью универсального метода.
На самом деле это экономит. Но значение для qDebug () не отображается. Можно увидеть, извлекается ли значение из QVariant:
EnumObject::DemoFlags val = var.value<EnumObject::DemoFlags>();
qDebug() << val;
дает:
QFlags<EnumObject::DemoFlags>(SomeFlag2)
Других решений пока нет …