【问题标题】:Qt programming: How to use custom data type in QVariantMap?Qt 编程:如何在 QVariantMap 中使用自定义数据类型?
【发布时间】:2010-11-29 12:45:57
【问题描述】:

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

对此有什么想法吗?

【问题讨论】:

    标签: javascript c++ qt webkit qvariant


    【解决方案1】:

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

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

    【讨论】:

    • 我也试过这个:stackoverflow.com/questions/956335/… 但似乎仍然无法工作
    • 正如这里 (doc.trolltech.com/4.7/qmetatype.html#Q_DECLARE_METATYPE) 所解释的,您必须声明一个公共默认构造函数、一个公共复制构造函数和一个公共析构函数。您没有任何复制构造函数。因此编译器尝试使用已声明为私有的母类(QObject)之一
    • QObjects 和 QVariant 不能很好地结合在一起,因为变体 values 应该被复制,而 QObjects 不是。
    • qVariantFromValue 函数描述中的示例是使用 QObject 完成的。所以我想这不是问题
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 2018-07-02
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      相关资源
      最近更新 更多