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