0

大家好,我有一个 foo 课

foo.h 中的代码

namespace GUI
{
class Foo : public QObject
{
Q_OBJECT

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


};
}

现在这工作和编译正常,但我想使用 QSettings 保存这个自定义 c++ 类,其中一个步骤是注册你的类Q_DECLARE_METATYPE

因此,只要我将此行 Q_DECLARE_METATYPE(Foo) 放在 foo.h 文件的末尾,我就会得到这些编译器错误 C2248:'QObject::Qobject':cannot access private member 在类'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 回答
0

我知道 QObject 不能被复制,这与它有关,但我不知道这里可能有什么问题以及如何纠正它。

所以声明一个拷贝构造函数,就OK了。

...
Foo(const Foo &_other);
...
于 2017-03-31T14:28:54.213 回答