Qt编程:如何在QVariantMap中使用自定义数据类型?

时间:2010-11-29 12:45:57

标签: javascript c++ qt webkit qvariant

我正在编写一个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

对此有何想法?

2 个答案:

答案 0 :(得分:3)

与编译器所说的一样,没有QVariant的构造函数以myobj为参数。您是否尝试使用qVariantFromValue功能?

我认为这就是你要找的东西。

答案 1 :(得分:2)

如果使用Q_DECLARE_METATYPE(myobj)注册自定义类型,则您的类需要公共默认构造函数(ok),公共析构函数(ok)和公共复制构造函数(错误消息告诉您的MISSING),请参阅documentation