7

enum クラス、QVariants、および QSettings クラスに問題があります。QSettings インスタンスに入る QVariant 内に格納したい enum クラス値があります。したがって、私のコードは実際には次のようになります。

enum class Foo
{
    Bar1, Bar2
}
Q_ENUMS(Foo)
Q_DECLARE_METATYPE(Foo)

...

Foo value = Bar2;
QSettings settings;
settings.setValue(QString("Foo"), QVariant::fromValue(value));

コード実行のこの時点で、アサーションが飛び込んで文句を言います。

ASSERT failure in QVariant::save: "Invalid type to save", file kernel\qvariant.cpp

インターネットを検索したところ、適切な << および >> 演算子がクラスにないことがわかりました。しかし、それは enum クラスのオプションではありません。私も使ってみました

qRegisterMetaType<Foo>("Foo");

しかし、それは役に立ちませんでした。他の提案/解決策があるかもしれません。ありがとう!

4

2 に答える 2

3

マスクされた unsigned int である列挙型が問題のようです。

Qt4 QSettings は列挙値を保存します (例: Qt::CheckState)

そことおそらくここでの解決策は、署名なしに変換することです。列挙型に戻る static_cast-result が有効かどうかを確認するには、列挙型範囲の最初と最後に値を追加Foo_lowestします。Foo_highest

于 2014-04-03T14:57:28.877 に答える