4

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

对此有任何想法吗?

4

2 回答 2

3

就像编译器说的那样,不QVariant存在以 amyobj作为参数的构造函数。您是否尝试过使用该qVariantFromValue功能?

我想这就是你正在寻找的。

于 2010-11-29T13:19:12.370 回答
2

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

于 2010-11-29T14:06:20.053 回答