2012-03-09 12 views
5

私はQT4クラスを設計しています。これまでのクラスは次のようになっています:セッターとゲッターを生成し、C++プリプロセッサでQ_PROPERTY()を定義する方法

class GIHNode : public QObject, public QGraphicsItem 
{ 

Q_OBJECT 
Q_INTERFACES(QGraphicsItem) 
[...] 
public: 
void setInteger(int); 
int getInteger(); 

[..] 
private: 
int Integer; Q_PROPERTY(int Integer READ getInteger WRITE setInteger) 
// Definition I'd like to replace 

The setters and getters are implemented like this: 
void GIHNode::setInteger(int x){Integer=x;} 
int GIHNode::getInteger(){return Integer;} 

私はこのすべての仕事を私に任せています。 私は、変数の定義とQ_PROPERTY内のテキストのためにこれを試してみました:

int Integer; Q_PROPERTY(int Integer READ getInteger WRITE setInteger) 

マクロが正しく事前れる

EXPORTEDVAR(int,Integer) 

と:私はラインを交換するとき

#define ID(x) x 
#define STR_HELPER(x,y) ID(x)y 
#define STRGET(x) STR_HELPER(get,x) 
#define STRSET(x) STR_HELPER(set,x) 
#define EXPORTEDVAR(type,varname) type varname; Q_PROPERTY(type varname READ STRGET(varname) WRITE STRSET(varname)) 

処理され、次のように置き換えられます。

int Integer; Q_PROPERTY(int Integer READ getInteger WRITE setInteger) 

私は手動でcppをチェックしました。コードはコンパイルされますが、このクラスのインスタンスのプロパティは取得できません。 私は、このクラスのインスタンスのメタオブジェクト(QT4 mocから)を使用してプロパティを取得していますが、それを見つけることができません。 これはプリプロセッサと関係があると思いますが、これを調べる方法はわかりません。

答えて

3

mocは引数を持つマクロを展開しないため(moc Limitationsを参照)、Q_PROPERTY文は表示されません。

関連する問題