如何生成setter和getter,并使用C++预处理器定义Q_PROPERTY()

How to generate setters and getters, and define Q_PROPERTY() with the C++ preprocessor

本文关键字:定义 处理器 预处理 PROPERTY C++ setter 何生成 getter      更新时间:2023-10-16

我正在设计一个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)来检索属性,但我找不到它。我想这与预处理器有关,但我不知道如何对此进行调查。

moc不使用参数扩展宏(请参阅moc限制),因此它看不到您的Q_PROPERTY语句。