Как создать сеттеры и геттеры и определить Q_PROPERTY() с помощью препроцессора C++

Я разрабатываю класс QT4. Пока что мой класс выглядит так:

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 :

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

на

EXPORTEDVAR(int,Integer)

, макрос правильно предварительно обрабатывается и заменяется на :

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

Я проверил вручную с помощью cpp. Код компилируется, но я не могу получить свойство экземпляра этого класса. Я использую метаобъект (из moc QT4) экземпляра этого класса для получения свойств, но не могу его найти. Я предполагаю, что это как-то связано с препроцессором, но я не знаю, как это исследовать.

5
задан Brian Tompsett - 汤莱恩 25 June 2016 в 12:39
поделиться