忍者ブログ

プログラム関連~チラシの裏~

スパム対策したりプログラム組んだり色々やってる為替とは別の面を表に出してみた。

<< | 2025/01 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | >>

マイクロアド リンク

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Q_OBJECTって何だ?

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
この記事にコメントする







  Vodafone絵文字入力用パレット表示ボタン i-mode絵文字入力用パレット表示ボタン Ezweb絵文字入力用パレット表示ボタン

この記事へのトラックバック




ブログ内検索
最新コメント
[06/24 Kazelcmo]
[06/24 Kazelxyk]
[04/23 Presencia]
最新トラックバック
ブログ関連リンク

カレンダー
12 2025/01 02
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
カウンター
FX NEWS

-外国為替-

AdminControlMenu: AdminMenu | NewEntry | EditComment | EditTrackback

忍者ブログ [PR]