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

4
我正在编写一个Qt应用程序,将一个C++类映射到QtWebkit中的Javascript对象。首先让我解释一下我要做什么:
我有一个继承自QObject的类:
class myobj : public QObject {
    Q_OBJECT
public:
    myobj();
    ~myobj();

pulbic slots:
    void getData();
}

在另一个类中,我试图向 QVariantMap 添加 myobj 实例:
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个回答

3

正如编译器所说,不存在将myobj作为参数的QVariant构造函数。您尝试过使用qVariantFromValue函数吗?

我认为这就是您在寻找的内容。


我也尝试了这个:https://dev59.com/D3NA5IYBdhLWcg3wcdhk但似乎仍然无法工作。 - Mickey Shine
1
如此解释(http://doc.trolltech.com/4.7/qmetatype.html#Q_DECLARE_METATYPE),您必须声明一个公共默认构造函数,一个公共复制构造函数和一个公共析构函数。您没有任何复制构造函数。因此,编译器尝试使用已声明为私有的母类(QObject)之一。 - Patrice Bernassola
2
QObjects和QVariant不太搭配,因为变量值应该被复制,而QObjects则不应该。 - Frank Osterfeld
qVariantFromValue函数描述中的示例是使用QObject完成的。所以我想这不是一个问题。 - Patrice Bernassola

2
如果您使用 Q_DECLARE_METATYPE(myobj) 注册自定义类型,那么您的类需要有一个公共的默认构造函数(没问题)、一个公共的析构函数(没问题)以及一个公共的复制构造函数(错误信息提示您缺少此项),请参阅文档

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接