「Qtの基礎 - プリプロセッサ」の版間の差分

ナビゲーションに移動 検索に移動
34行目: 34行目:
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
  #include <QtGlobal>
  #include <QtGlobal>
</syntaxhighlight>
<br><br>
== クラスに関するマクロ ==
==== Q_OBJECT ====
Qtのメタオブジェクトシステムの中核となるマクロである。<br>
<code>QObject</code>クラスを継承するサブクラスの定義内で使用され、シグナル / スロットのメカニズム、実行時型情報 (RTTI)、動的プロパティシステムを有効にする。<br>
<br>
このマクロを使用することにより、クラスはQtの多くの高度な機能を使用できるようになる。<br>
<br>
==== Q_PROPERTY ====
クラスのプロパティを宣言するために使用する。<br>
<br>
このマクロを使用することにより、C++のメンバ変数をQtのプロパティシステムに統合できる。<br>
これにより、QMLでのプロパティバインディングやGUIデザイナーでのプロパティ編集が可能になる。<br>
<br>
また、プロパティの読み取り / 書き込みメソッド、通知シグナル、リセットメソッド等も定義できる。<br>
<br>
==== Q_INVOKABLE ====
このマクロをメソッド宣言の前に付加することにより、そのメソッドをQMLから呼び出し可能にする。<br>
<br>
一般的に、publicスロットは自動的にQMLから呼び出せるが、publicメソッドは<code>Q_INVOKABLE</code>を使用しない限り呼び出せない。<br>
<br>
==== signals / Q_SIGNAL / Q_SIGNALS ====
シグナルを宣言するために使用する。<br>
<br>
シグナルは、オブジェクト間の通信メカニズムの一部であり、特定のイベントが発生したことを他のオブジェクトに通知するために使用する。<br>
<br>
==== slots / Q_SLOT / Q_SLOTS ====
スロットを宣言するために使用する。<br>
<br>
スロットはシグナルに接続可能な特殊な関数であり、シグナルが発信されたときに呼び出される。<br>
<br>
==== Q_EMIT ====
シグナルを発信 (emit) する場合に使用するマクロである。
本質的には、C++のソースコード内でシグナルを発信するための構文的な装飾である。
シグナルを発信する場合は、明示的にそれがシグナルの発信であることを示す。
通常は、<code>emit</code>キーワードとして使用するが、<code>Q_EMIT</code>はその完全修飾名である。
コンパイル時には何も行わず、コードの可読性を向上させる目的で使用する。
<br>
<syntaxhighlight lang="c++">
class MyClass : public QObject
{
    Q_OBJECT
signals:
    void valueChanged(int newValue);
public:
    void updateValue(int value)
    {
        Q_EMIT valueChanged(value);
        // または、emit valueChanged(value); としてもよい
    }
};
</syntaxhighlight>
<br><br>
== Q_ENUMマクロ ==
列挙型をQtのメタオブジェクトシステムに登録するために使用する。<br>
これにより、列挙型の値を文字列に変換する、または、QMLで使用したりすることが可能になる。<br>
<br><br>
== Q_GADGET ==
<code>QObject</code>クラスを継承せずに、Qtのメタオブジェクトシステムの一部の機能 (プロパティ、列挙型等) を利用可能にするマクロである。<br>
<br>
軽量なオブジェクトを作成する場合に有効である。<br>
<br><br>
== Q_DECLARE_METATYPE ==
カスタム型を<code>QVariant</code>クラスで使用可能にするためのマクロである。<br>
これにより、その型を<code>QVariant</code>クラスに格納したり、シグナル / スロットシステムで使用することができる。<br>
<br><br>
== 翻訳に関するマクロ ==
==== QT_TR_NOOP ====
国際化 (i18n) のために使用する。<br>
<br>
このマクロで囲まれた文字列は、翻訳ツールによって抽出可能になるが、実行時には通常の文字列として扱われる。<br>
<br>
==== Q_TRANSLATE_NOOP ====
国際化 (i18n) のために使用するマクロである。<br>
翻訳が必要な文字列を標識付けするために使用するが、その場では翻訳を行わない。<br>
<br>
文字列を翻訳ツールで認識可能にするが、実行時には元の文字列をそのまま返す。<br>
後で翻訳が必要になる可能性のある文字列を準備する場合に使用する。<br>
<br>
一般的に、<code>QObject::tr</code>メソッドや<code>QCoreApplication::translate</code>メソッドと組み合わせて使用する。<br>
<br>
以下の例では、"File not found"という文字列が翻訳ツールにより抽出可能になるが、変数messageには元の英語の文字列がそのまま格納されている。<br>
後で必要に応じて、QCoreApplication::translateメソッドを使用して実際の翻訳を行う。<br>
<syntaxhighlight lang="c++">
const char *message = Q_TRANSLATE_NOOP("MyDialog", "File not found");
// 後で翻訳する場合
QString translatedMessage = QCoreApplication::translate("MyDialog", message);
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
<br><br>

案内メニュー