Я разрабатываю класс 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) экземпляра этого класса для получения свойств, но не могу его найти. Я предполагаю, что это как-то связано с препроцессором, но я не знаю, как это исследовать.