如何生成setter和getter,并使用C++预处理器定义Q_PROPERTY()
How to generate setters and getters, and define Q_PROPERTY() with the C++ preprocessor
我正在设计一个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
语句。
相关文章:
- #定义c-预处理器常量..我做错了什么
- 如何摆脱为条件编译定义预处理器宏的需要?
- C 预处理器 - 现有定义的预置路径
- VS2015 预处理器定义与点
- 如何在编译时定义C++预处理器指令的值?
- 将预处理器配置定义迁移到 constexpr,而不会造成内存膨胀
- Cygwin下的gcc 9.3.0预处理器:cmdline -Dname,但名称似乎未定义
- 宏定义中的预处理器令牌两边有两个双引号
- FFTW_GNUC_未定义为预处理器宏
- 替换预处理器定义中的字符
- CMake 正在删除预处理器定义
- 在宏中定义然后取消定义预处理器变量
- "unix" C++预处理器宏未定义 -std=c++11
- 预处理器,在未定义时将宏扩展为无
- CMAKE CHECKCSOURCECOPILE将预处理器定义传递给Armlink
- Tensorflow 如何定义预处理器宏?
- 是否可以使用字符串检查预处理器定义
- 如何设置此视觉工作室 (2015) 自定义生成步骤(工具?基本上,我想要一个修改头文件(c ++)的预处理器步骤
- 如何使用算术生成预处理器定义?
- 用于在 Visual Studio 中为整个项目或解决方案定义带有参数的预处理器宏的选项