0

こんにちは皆さん、私はfooクラスを持っています

foo.h のコード

namespace GUI
{
class Foo : public QObject
{
Q_OBJECT

public:
explicit Foo(QObject *parent = 0);
virtual ~Foo();
....


};
}

これで問題なく動作し、コンパイルできますが、QSettings を使用してこのカスタム C++ クラスを保存したいのですが、ステップの 1 つはクラスを登録することですQ_DECLARE_METATYPE

したがって、この行 Q_DECLARE_METATYPE(Foo) を foo.h ファイルの最後に配置するとすぐに、これらのコンパイラ エラーが発生します C2248:'QObject::Qobject':cannot access private member defined in class 'QObject' をクリックすると、私のconnection.hヘッダーファイルの最後の行で、何が間違っているかについての他の情報を提供しません。つまり、エラーは私を指摘します

  Class Foo
  {

  };<---- point me here
  Q_DECLARE_METATYPE(Foo)

QObject をコピーできないことは知っていますが、これはそれに関連していますが、ここで何が間違っているのか、どうすれば修正できるのかわかりません。前もって感謝します

4

3 に答える 3

2

QObject をコピーできないことは知っていますが、これはそれに関連していますが、ここで何が間違っているのか、どうすれば修正できるのかわかりません。

関連しています。Q_DECLARE_METATYPEタイプがコピー可能である必要がありますが、タイプは QObject から継承されるため、それはできません。確かに、代わりにできますが、代わりQ_DECLARE_METATYPE(Foo*)に設定を別の値クラスに移動して、QSettings を使用して保存できるようにする必要があると思います。

于 2014-11-18T23:33:48.893 に答える
0

Q_DECLARE_METATYPEステートメントが名前空間のにあり、クラス名を完全に修飾していることを確認してください。詳細については、Q_DECLARE_METATYPEドキュメントを参照してください。

namespace GUI
{

class Connection : public QObject
{
    ...
};

}

Q_DECLARE_METATYPE(GUI::Connection)
于 2014-11-18T23:19:40.263 に答える