Qt编程:如何在QVariantMap中使用自定义数据类型? 我正在编写一个Qt应用程序,它将C++类映射到QtWebkit中的JavaScript对象。首先让我解释一下我想做什么:

Qt编程:如何在QVariantMap中使用自定义数据类型? 我正在编写一个Qt应用程序,它将C++类映射到QtWebkit中的JavaScript对象。首先让我解释一下我想做什么:,javascript,c++,qt,webkit,qvariant,Javascript,C++,Qt,Webkit,Qvariant,我从QObject继承了一个类: class myobj : public QObject { Q_OBJECT public: myobj(); ~myobj(); pulbic slots: void getData(); } 在另一个类中,我尝试将myobj实例添加到QVariantMap: QVariantMap anotherClass::getObj() { myobj* obj1 = new myobj(); myobj* obj

我从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

对此有什么想法吗?

正如编译器所说,不存在以
myobj
为参数的
QVariant
构造函数。你试过使用这个函数吗


我认为这就是您正在搜索的内容。

如果您使用Q_DECLARE_元类型(myobj)注册自定义类型,则您的类需要一个公共默认构造函数(ok)、一个公共析构函数(ok)和一个公共副本构造函数(错误消息告诉您缺少该构造函数),请参阅。

我也尝试了这个方法:但是seemd仍然无法按照此处的解释工作(),您必须声明一个公共默认构造函数、一个公共副本构造函数和一个公共析构函数。您没有任何复制构造函数。因此,编译器尝试使用母类(QObject)中的一个,该类已声明为PrivateQObject,而QVariant不能很好地结合在一起,因为变量值应该被复制,而QObject不是。qVariantFromValue函数描述中的示例是使用QObject完成的。所以我想这不是问题