2010-09-16 127 views
3

我想将我的Class声明为Metatype for Qt,但找出了一些问题。看起来,在MetaType声明之后,他想要访问拷贝构造函数,或者像我想象的那样显式地不允许QObject使用。
这是我的头:在Qt中声明Metatype的问题

#include <QtCore/QObject> 
#include <QtCore/QMetaType> 

class Message : private QObject 
{ 
    Q_OBJECT 

public: 
    Message(); 

    int sourceId; 
    int targetId; 

private: 
    Q_DISABLE_COPY(Message) 
}; 

Q_DECLARE_METATYPE(Message) 
Q_DECLARE_METATYPE(Message*) 

Message::Message() : 
    QObject() 
{ 
} 

所以,我收到以下错误:

消息::消息:无法访问 私有成员类 消息宣布见参考作用 模板实例'void * qMetaTypeConstructHelper(const T *)'正在编译

和还有一些,但我认为它们几乎是一样的,因为同样的问题。
有人知道我在做什么错了吗?

回答

4

你必须公开继承自QObject:

class Message : public QObject 

通过这样做,你不需要声明元类型的类信息。只用于指针。

+0

你好,我试着继承公共QObject。如果我删除了Q_DECLARE_METATYPE(消息)并仅声明指针,还有另一个问题:qt_metatype_id:不是QMetaTypeId的成员,请参阅参考函数模板实例化'int qMetaTypeId (T *)'正在编译 - 因为我正在使用:scriptInterpreter.setDefaultPrototype(qMetaTypeId (),this-> qs_msg_prototype); – Tobias 2010-09-16 08:27:26

+0

也可以为不继承QObject的类声明一个元类型?因为如果我试图这样做,我得到staticMetaObject不能在我的元类型类中找到的错误.. – Tobias 2010-09-16 11:24:38

+1

是的,它是(例如声明指针的元类型)。 – 2010-09-16 11:30:26