2

Q_PROPERTY別のヘルパー マクロ内にマクロを配置する方法は?

#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) には、(動作中の) セッター/ゲッター メソッドと対応するメンバー変数が表示されますが、行の単一の文字は表示されませんQ_PROPERTY

更新: ユーザー マクロを適切に展開する Qt5.1 で動作するようです。Qt4.8 は動作しません。Qt5.0 はテストされていません。#QTBUG-35を参照してください(?? のおかげです)。

4

2 に答える 2

2

Qt4.x の moc は、プリプロセッサ マクロ内の Q_ マクロを認識しません。

Qt5.x の moc は、Q_ マクロを解析する前にプリプロセッサ マクロを展開します。

于 2014-03-04T06:49:50.447 に答える
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)
于 2013-07-15T06:42:08.803 に答える