QTを使い始めていろいろ学習した。
やたらとマクロがあるのでマクロの正体を探らないと何もできん。
というわけで、Q_OBJECTのマクロから追いかけてみた。
マクロのマクロのマクロは、同じヘッダの中にあります。
C:\QT\4.3.4\SRC\corelib\kernel\qobjectdefs.h
--ファイルここから--
/* tmake ignore Q_OBJECT */
#define Q_OBJECT \
public: \
Q_OBJECT_CHECK \
static const QMetaObject staticMetaObject; \
virtual const QMetaObject *metaObject() const; \
virtual void *qt_metacast(const char *); \
QT_TR_FUNCTIONS \
virtual int qt_metacall(QMetaObject::Call, int, void **); \
private:
/* tmake ignore Q_OBJECT */
--ファイルここまで--
こんなマクロがあったのかよ!びっくりダヨ!
Q_OBJECT_CHECKとQT_TR_FUNCTIONSも追いかけなきゃいけなくなったじゃないか。
なんてこったい。
謎が謎をよびマクロがマクロを呼び。
よりいっそう謎が深まった・・・。
いやまぁ。MFCでも面倒なコードは自動で作成してくれているので
その自動部分と思えば楽なのかもしれんが・・・。
--Q_OBJECT_CHECKここから--
/* tmake ignore Q_OBJECT */
#define Q_OBJECT_CHECK \
template inline void qt_check_for_QOBJECT_macro(const T &_q_argument) const \
{ int i = qYouForgotTheQ_OBJECT_Macro(this, &_q_argument); Q_UNUSED(i); }
--Q_OBJECT_CHECKここまで--
--QT_TR_FUNCTIONSここから--
#ifndef QT_NO_TRANSLATION
# ifndef QT_NO_TEXTCODEC
// full set of tr functions
// ### Qt 5: merge overloads
# define QT_TR_FUNCTIONS \
static inline QString tr(const char *s, const char *c = 0) \
{ return staticMetaObject.tr(s, c); } \
static inline QString trUtf8(const char *s, const char *c = 0) \
{ return staticMetaObject.trUtf8(s, c); } \
static inline QString tr(const char *s, const char *c, int n) \
{ return staticMetaObject.tr(s, c, n); } \
static inline QString trUtf8(const char *s, const char *c, int n) \
{ return staticMetaObject.trUtf8(s, c, n); }
# else
// no QTextCodec, no utf8
// ### Qt 5: merge overloads
# define QT_TR_FUNCTIONS \
static inline QString tr(const char *s, const char *c = 0) \
{ return staticMetaObject.tr(s, c); } \
static inline QString tr(const char *s, const char *c, int n) \
{ return staticMetaObject.tr(s, c, n); }
# endif
#else
// inherit the ones from QObject
# define QT_TR_FUNCTIONS
#endif
--QT_TR_FUNCTIONSここまで--
ああっここでtrが宣言されてるのか。
文字列の変換ってコレでやってたのね。
ここまで追いかけるのに随分時間かかったなぁ。
また、emitも同じようにマクロだったmocでmoc_*.cppを出力するために必要な物みたい
emitを入れると送信を作成する模様。うーむ。ソースでありながらQt専用部分になるなぁ。
アルゴリズムは完全別クラスにしてQT以外にも対応できるようにしたほうがよさそう。
※追記 trというのは翻訳するために必要なようです。
基本的に翻訳ファイルという物を添付して配る物。
または、リソースに挿入して使うものみたいです。
まだやり方を知りませんがやってみます。
俺の翻訳はファンキーだから間違ってることが多い。
PR
<< 乱数クラスを利用したトランプのベースクラス(サンプル) | [PR]Q_OBJECTって何だ? | QT/WIndowsでCalculator Form Exampleを実行する。 >>
HOME | 戻る