如何将Q_PROPERTY
宏放在另一个helper-macro中?
#define SimpleAllinOne(member, _type) \
public: \
void Set##member(_type _arg_##member) \
{ \
m_##member = _arg_##member;\
} \
_type Get##member() const\
{ \
return m_##member;\
} \
private: \
_type m_##member; \
Q_PROPERTY(_type member READ Get##member WRITE Set##member)
..不起作用。预处理器输出(gcc -E flag
或nmake/jom /P flag
)显示(工作)setter / getter方法和相应的成员变量,但不显示Q_PROPERTY
行的单个字符。
更新:它似乎与Qt5.1一起使用,可以正确扩展用户宏。 Qt4.8不起作用,Qt5.0尚未经过测试。见#QTBUG-35(感谢??)。
答案 0 :(得分:2)
moc无法识别预处理器宏中的Q_宏。
Qt5.x中的moc在解析Q_宏之前扩展了预处理器宏。
答案 1 :(得分:0)
你的行中也有一个错误
Set##member##(_type _arg_##member) \
_type Get##member##() const\
因为##()被评估为
SetArg(
_type GetArg(
由gcc拒绝(MSVC忽略它)。
尝试以下更正版本,它应该有效:
#define MachAlles(member, _type) \
public: \
/**
* Set member of type _type.
* @see m_##member for a more detailed description
*/ \
void Set##member(_type _arg_##member) \
{ \
m_##member = _arg_##member;\
} \
/**
* Get member of type _type.
* @see m_##member for a more detailed description
*/ \
_type Get##member() const\
{ \
return m_##member;\
} \
private: \
_type m_##member; \
Q_PROPERTY(_type member READ Get##member WRITE Set##member)