Qt编程:如何在QVariantMap中使用自定义数据类型?
我正在编写一个 Qt 应用程序,它将 C++ 类映射到 QtWebkit 中的 Javascript 对象。首先让我解释一下我想要做什么:
我有一个从 QObject 继承的类:
class myobj : public QObject {
Q_OBJECT
public:
myobj();
~myobj();
pulbic slots:
void getData();
}
在另一个类中,我尝试将 myobj 实例添加到 QVariantMap:
QVariantMap anotherClass::getObj() {
myobj* obj1 = new myobj();
myobj* obj2 = new myobj();
QVariantMap items;
items.insert(QString("0"), QVariant(*obj1));
items.insert(QString("1"), QVariant(*obj2));
return items;
}
然后出现以下错误:
error: no matching function for call to ‘QVariant::QVariant(myobj&)’
所以我尝试添加声明:
Q_DECLARE_METATYPE(myobj);
但我得到了:
error: ‘QObject::QObject(const QObject&)’ is private
对这个有什么想法吗?
I am writing a Qt app that maps a C++ class to Javascript object in QtWebkit. Firstly let me explain what I am trying to do:
I have a class inherited from QObject:
class myobj : public QObject {
Q_OBJECT
public:
myobj();
~myobj();
pulbic slots:
void getData();
}
And in another class I tried to add myobj instances to QVariantMap:
QVariantMap anotherClass::getObj() {
myobj* obj1 = new myobj();
myobj* obj2 = new myobj();
QVariantMap items;
items.insert(QString("0"), QVariant(*obj1));
items.insert(QString("1"), QVariant(*obj2));
return items;
}
And then I got the following error:
error: no matching function for call to ‘QVariant::QVariant(myobj&)’
So I tried to add declarations:
Q_DECLARE_METATYPE(myobj);
But I got:
error: ‘QObject::QObject(const QObject&)’ is private
Any idea about this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
正如编译器所说,不存在以
myobj
作为参数的QVariant
构造函数。您是否尝试过使用qVariantFromValue
函数?我想这就是你正在寻找的东西。
Like the compiler said, no constructor of
QVariant
exists that take amyobj
as parameter. Have you tried to use theqVariantFromValue
function instead?I think this is what you are searching for.
如果您使用 Q_DECLARE_METATYPE(myobj) 注册自定义类型,则您的类需要一个公共默认构造函数 (ok)、一个公共析构函数 (ok) 和一个公共复制构造函数(错误消息告诉您缺少该构造函数),请参阅 文档。
If you register your custom type with Q_DECLARE_METATYPE(myobj), your class needs a public default constuctor (ok), a public destructor (ok) and a public copy constructor (MISSING which the error message is telling you), see the documentation.