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

发布于 2024-10-04 23:08:01 字数 866 浏览 0 评论 0原文

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

对这个有什么想法吗?

I am writing a Qt app that maps a C++ class to Javascript object in QtWebkit. Firstly let me explain what I am trying to do:

I have a class inherited from QObject:

class myobj : public QObject {
    Q_OBJECT
public:
    myobj();
    ~myobj();

pulbic slots:
    void getData();
}

And in another class I tried to add myobj instances to 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;
}

And then I got the following error:

error: no matching function for call to ‘QVariant::QVariant(myobj&)’

So I tried to add declarations:

Q_DECLARE_METATYPE(myobj);

But I got:

error: ‘QObject::QObject(const QObject&)’ is private

Any idea about this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

獨角戲 2024-10-11 23:08:01

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

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

Like the compiler said, no constructor of QVariant exists that take a myobj as parameter. Have you tried to use the qVariantFromValue function instead?

I think this is what you are searching for.

止于盛夏 2024-10-11 23:08:01

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

If you register your custom type with Q_DECLARE_METATYPE(myobj), your class needs a public default constuctor (ok), a public destructor (ok) and a public copy constructor (MISSING which the error message is telling you), see the documentation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文