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.