Qtの基礎 - プリプロセッサ
ナビゲーションに移動
検索に移動
概要
QT_VERSION_CHECKマクロ
QT_VERSION_CHECK
マクロを使用する場合は、QtGlobal
をインクルードする必要がある。
このヘッダファイルには、QT_VERSION_CHECK
マクロを含む多くのQtの基本的な定義が含まれている。
#include <QtGlobal>
Q_ARGマクロ
Q_ARG
マクロは、Qtフレームワークで提供されているマクロの1つであり、主にQMetaObject::invokeMethod
メソッドと組み合わせて使用される。
このマクロの主な目的は、メタオブジェクトシステムを介してメソッドを呼び出す時に、引数の型と値を指定することである。
Q_ARG
マクロのシンタックスを以下に示す。
// <引数の型>は、C++の型 (int型, QStringクラス, QVariantクラス等)
// <値>は、その型の具体的な値である
Q_ARG(<引数の型>, <値>)
Q_ARG
マクロは、スレッド間通信やイベントループを介したメソッド呼び出し等、直接的なメソッド呼び出しが難しい場合に特に有効である。
例えば、あるスレッドから別のスレッドにあるオブジェクトのメソッドを呼び出す場合等に使用される。
以下の例では、someObjectオブジェクトのupdateValueメソッド (int型とQStringクラスの2つの引数を持つ) を呼び出している。
Q_ARGマクロを使用して、このメソッドの引数の型と値を指定している。
QMetaObject::invokeMethod(someObject, "updateValue",
Qt::QueuedConnection,
Q_ARG(int, 42),
Q_ARG(QString, "Hello"));
Q_ARG
マクロのメリットを以下に示す。
- 型安全性
- コンパイル時に引数の型チェックが行われるため、誤った型の引数を渡すことによるランタイムエラーを防ぐことができる。
- 可変個数の引数を持つメソッドの呼び出しに対応
- 必要な数だけQ_ARGマクロを追加することにより、任意の数の引数を持つメソッドを呼び出すことができる。
ただし、Q_ARG
マクロは、ポインタ型や参照型の引数を直接扱うことはできない。
ポインタ型や参照型の引数を使用する場合は、QVariant
クラスを介して渡す必要がある。
Q_ARG
マクロは、Qtのシグナル / スロットシステムと密接に関連しており、Qtプログラミングにおいて柔軟なメソッド呼び出しを実現するための重要なツールの1つである。