首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Q_DECLARE_METATYPE完全不起作用

Q_DECLARE_METATYPE完全不起作用
EN

Stack Overflow用户
提问于 2013-09-29 01:32:16
回答 1查看 14.5K关注 0票数 14

我尝试在QAbstractListModel中使用自定义类,但Q_DECLARE_METATYPE根本不起作用!

为了测试问题所在,我将代码简化如下:

代码语言:javascript
复制
#include <QMetaType>
#include <QVariant>
#include <QDebug>

typedef int x;
Q_DECLARE_METATYPE(x)

void main() {
    QVariant v;
    qDebug() << v.canConvert<x>();
}

并且输出仍然是假的!

顺便说一句,我想实现的代码如下:

代码语言:javascript
复制
namespace ns{
    class a {
        public:
            a();    //default constructor
            a(const a&);    //copy constructor
            ~a();
    }
}
Q_DECALRE_METATYPE(ns::a);

当我尝试像这样重新实现QAbstractListModel::data时:

代码语言:javascript
复制
QList<ns::s> list;    //this is actually a member field of the custom model.
QVariant MyListModel::data(const QModelIndex& index, int role) const {      
    Q_UNUSED(role)
    return list.at(index.row());        
}

编译器将报告错误,如:

代码语言:javascript
复制
cannot convert const ns::a to QVariant::Type
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-29 01:57:50

您的示例过于简单,因为文档非常清楚地声明传递给Q_DECLARE_METATYPE的类/结构必须有一个默认构造函数、一个复制构造函数和一个公共析构函数:http://qt-project.org/doc/qt-5.0/qtcore/qmetatype.html#Q_DECLARE_METATYPE

也就是说,这里有一个非常简单的示例,它展示了Q_DECLARE_METATYPE的工作方式:

代码语言:javascript
复制
#include <QMetaType>
#include <QVariant>
#include <QDebug>

namespace MyNS {
    class MyClass {
    public:
        MyClass() : value(0) { }
        MyClass(int value) : value(value) { }
        MyClass(const MyClass &other) { value = other.value; }
        ~MyClass() { }
        int getValue() const { return value; }
    private:
        int value;
    };
};

Q_DECLARE_METATYPE(MyNS::MyClass);

int main(int argc, char *argv[])
{
    MyNS::MyClass m(15);
    QVariant v = QVariant::fromValue(m);
    qDebug() << v.canConvert<MyNS::MyClass>();
    qDebug() << v.value<MyNS::MyClass>().getValue();
}
票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19069758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档