大家好我有一个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':无法访问类中声明的私有成员' QObject'点击时只带我到我的connection.h头文件的最后一行,并没有提供任何其他可能有什么问题的信息,我的错误指向
Class Foo
{
};<---- point me here
Q_DECLARE_METATYPE(Foo)
我知道QObject无法复制,这与它有关,但我不知道这里可能有什么问题,我怎么能纠正它。 提前致谢
答案 0 :(得分:2)
我知道QObject无法复制,这与它有关,但我不知道这里可能有什么问题,我怎么能纠正它。
相关。 Q_DECLARE_METATYPE
要求您的类型可以复制,但您的类型继承自QObject,因此您无法执行此操作。当然,您可以改为Q_DECLARE_METATYPE(Foo*)
,但我认为您应该将设置移动到单独的值类中,然后您可以使用QSettings进行保存。
答案 1 :(得分:0)
确保您的Q_DECLARE_METATYPE
声明在您的命名空间的外,并且您完全符合您的班级名称。有关详细信息,请参阅Q_DECLARE_METATYPE
doc。
namespace GUI
{
class Connection : public QObject
{
...
};
}
Q_DECLARE_METATYPE(GUI::Connection)
答案 2 :(得分:0)
我知道QObject无法复制,这与它有关但是我 我不知道这里可能有什么问题,我怎么能纠正它。
所以声明一个拷贝构造函数,然后就可以了。
...
Foo(const Foo &_other);
...