📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

ページの作成:「== 概要 == オブジェクト指向のプログラム言語のクラスのデザインパターンの1種である。<br> デザインパターンとは、オブジェクト指向の言語で使用される設計のパターンのことであり、設計時に直面する問題とその解決策を整理してまとめたものを指す。<br> <br> シングルトンは、クラスの設計方法の1つであり、クラスのインスタンスを2つ以上生成…」
 
26行目: 26行目:
これは、そのクラスが<code>Q_OBJECT</code>マクロが記述されており、QMLで利用可能である場合(<code>QML_ELEMENT</code>マクロまたは<code>QML_NAMED_ELEMENT()</code>マクロを持つ場合)にのみ有効である。<br>
これは、そのクラスが<code>Q_OBJECT</code>マクロが記述されており、QMLで利用可能である場合(<code>QML_ELEMENT</code>マクロまたは<code>QML_NAMED_ELEMENT()</code>マクロを持つ場合)にのみ有効である。<br>
<br>
<br>
Qt 5の場合、デフォルトでは、各<code>QQmlEngine</code>クラスは、その型に最初にアクセスした時、その型のデフォルトコンストラクタを使用してシングルトンのインスタンスを生成する。<br>
<u>Qt 5の場合</u>、デフォルトでは、各<code>QQmlEngine</code>クラスは、その型に最初にアクセスした時、その型のデフォルトコンストラクタを使用してシングルトンのインスタンスを生成する。<br>
もし、デフォルトコンストラクタが存在しない場合は、シングルトンは初期状態ではアクセス不能になるため、<br>
もし、デフォルトコンストラクタが存在しない場合は、シングルトンは初期状態ではアクセス不能になるため、<br>
<code>qmlRegisterSingletonType()</code>に特定のファクトリ関数を指定する、または、<br>
<code>qmlRegisterSingletonType</code>関数に特定のファクトリー関数を指定する、または、<br>
<code>qmlRegisterSingletonInstance()</code>に同じクラスで同じ型の名前空間とバージョンの特定のインスタンスを指定して呼び出すことにより、オーバーライドすることができる。<br>
<code>qmlRegisterSingletonInstance</code>関数に同じクラスで同じ型の名前空間とバージョンの特定のインスタンスを指定して呼び出すことにより、オーバーライドすることができる。<br>
<br>
<br>
Qt 6の場合、デフォルトでは、各<code>QQmlEngine</code>クラスは、その型に最初にアクセスした時、その型のデフォルトコンストラクタ、または、<br>
<u>Qt 6の場合</u>、デフォルトでは、各<code>QQmlEngine</code>クラスは、その型に最初にアクセスした時、その型のデフォルトコンストラクタ、または、<br>
<code>T *create(QQmlEngine*, QJSEngine*)</code>というシグネチャを持つ静的ファクトリ関数のどちらかを使用して、シングルトンのインスタンスを生成しようとする。<br>
静的ファクトリー関数(<code>T *create(QQmlEngine*, QJSEngine*)</code>)のいずれかを使用して、シングルトンのインスタンスを生成しようとする。<br>
もし、両方が存在して、かつ、アクセス可能な場合、デフォルトコンストラクタが優先される。<br>
もし、両方が存在して、かつ、アクセス可能な場合、デフォルトコンストラクタが優先される。<br>
<br>
<br>
39行目: 39行目:
デフォルトコンストラクタを持つクラスをシングルトンとして宣言する場合は、<code>QML_SINGLETON</code>マクロを記述するだけである。<br>
デフォルトコンストラクタを持つクラスをシングルトンとして宣言する場合は、<code>QML_SINGLETON</code>マクロを記述するだけである。<br>
<br>
<br>
<syntaxhighlight lang="c++">
<syntaxhighlight lang="c++">
  class MySingleton : public QObject
  class MySingleton : public QObject
  {
  {