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

标签 c++ qt4 c-preprocessor

我正在设计一个 QT4 类。到目前为止,我的类(class)是这样的:

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 Limitations ),因此它看不到您的 Q_PROPERTY 语句。

关于c++ - 如何生成 setter 和 getter,并使用 C++ 预处理器定义 Q_PROPERTY(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9641154/

相关文章:

c++ - Qt调用外部Python脚本

python - PyQt:没有这样的插槽

c++ - 如何在 Linux 上关闭 gcc 预处理器?

c - 宏存储在哪里?

c++ - C++中作为类成员的分布

C++ Opengl 光照不工作

c++ - QTableView 导出到 .csv 获取的行数仅限于 256

c++ - 在没有 C 预处理器的情况下记录表达式的文本及其结果

c++ - 在 OpenGL 中将粒子渲染为具有透明度的 GL_TRIANGLE_FAN

c++ - C++ 中的数据抽象和二进制方法