4

QJsonを使用して派生クラスをシリアル化していQObjectます。クラス自体は問題なくシリアル化できますが、メンバーの1つになると、少し問題が発生します。

クラスには名前が付けられ、次のように定義されるCProjectプロパティが含まれています。files

QList<CProjectFile> files;

のインスタンスをシリアル化するCProjectと、コンソールに次のメッセージが表示されます。

QMetaProperty::read: Unable to handle unregistered datatype 'QList<CProjectFile>' for property 'CProject::files'

データ型を登録する必要があることをどこかで読んだので、次の宣言の後に次を追加しましたCProject

Q_DECLARE_METATYPE(QList<CProjectFile>)

...そしてそれが何もしなかったとき、私は付け加えました:

qRegisterMetaType< QList<CProjectFile> >();

何も機能していません。私は何が間違っているのですか?

4

1 に答える 1

5

QJsonがどのように機能するかはわかりませんが、おそらくストリーム演算子が必要です。CProjectFileクラスの宣言後、以下のようにしてください

class CProjectFile
{
   ...
};

    Q_DECLARE_METATYPE(CProjectFile)

    qRegisterMetaType<CProjectFile>("CProjectFile");//Do this if you need signal/slots

    qRegisterMetaTypeStreamOperators<QList<CProjectFile> >("CProjectFileList");

ストリーム演算子については、 QTDocも参照してください。

于 2011-06-02T07:09:06.097 に答える