2010-09-16 8 views
3

J'essaie de déclarer ma classe comme métatype pour Qt mais je cherche à résoudre certains problèmes. Il semble que, après la déclaration MetaType, il veut avoir accès à un constructeur de copie ou quelque chose comme ça qui n'est explicitement pas autorisé pour QObjects comme je le pensais.
Ceci est mon en-tête:Problème avec la déclaration de métatype dans Qt

#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() 
{ 
} 

Alors, je reçois les erreurs suivantes:

message :: Message: ne peut pas accéder parlementaire déclarés dans la classe message voir référence à la fonction modèle instanciation 'vide * qMetaTypeConstructHelper (const T *)' en cours de compilation

et un peu plus, mais je pense qu'ils sont presque les mêmes et à cause du même problème. Quelqu'un sait ce que je fais mal?

Répondre

4

Vous devez hériter publiquement de QObject:

class Message : public QObject 

En faisant cela, vous n'avez pas besoin de déclarer métatype Message de classe. Seulement pour le pointeur.

+0

Bonjour, j'ai essayé d'hériter de QObject public. Si je supprime le Q_DECLARE_METATYPE (Message) et ne déclare que le pointeur, il y a un autre problème: qt_metatype_id: n'est pas un membre de QMetaTypeId , voir la référence à l'instanciation du modèle de fonction 'int qMetaTypeId (T *)' en cours de compilation utilise: scriptInterpreter.setDefaultPrototype (qMetaTypeId (), this-> qs_msg_prototype); – Tobias

+0

Est-il également possible de déclarer un métatype pour une classe qui n'hérite pas de QObject? Parce que si j'essaye de faire cela, j'obtiens l'erreur que le staticMetaObject ne peut pas être trouvé dans ma classe de méta-type .. – Tobias

+1

Oui, c'est (par exemple déclarant des méta-types pour des pointeurs). –