2010-09-16 126 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