2012-03-09 6 views
5

Sto progettando una classe QT4. Fin qui la mia classe assomiglia a questo:Come generare setter e getter e definire Q_PROPERTY() con il preprocessore C++

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;} 

Mi piacerebbe definire una macro che faccia tutto questo lavoro per me. Ho provato per la definizione di una variabile e il testo all'interno Q_PROPERTY:

#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)) 

Quando si sostituisce la linea:

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

con

EXPORTEDVAR(int,Integer) 

la macro sia correttamente pre -elaborato ed è stato sostituito con:

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

Ho controllato manualmente con cpp. Il codice viene compilato, ma non posso ottenere la proprietà di un'istanza di questa classe. Sto usando il metaoggetto (da QT4 moc) di un'istanza di questa classe per recuperare le proprietà, ma non riesco a trovarlo. Suppongo che questo abbia qualcosa a che fare con il pre-processore, ma non so come indagare su questo.

risposta

3

Il moc non espande le macro con argomenti (Vedere moc Limitations), quindi non visualizza le tue istruzioni Q_PROPERTY.