Qtモジュールにおけるスレッドのサポート
スレッドとSQLモジュール
データベース接続は、それを生成したスレッド内からのみ使用する必要があります。接続を別のスレッドに移すには、QSqlDatabase::moveToThread() を使用します。
さらに、QSqlDrivers が使用するサードパーティ製ライブラリによっては、マルチスレッドプログラムでの SQL モジュールの使用に関して、さらなる制限が課される場合があります。詳細については、お使いのデータベースクライアントのマニュアルを参照してください。
スレッド内での描画
QPainter スレッド内でQImage 、QPrinter 、QPicture 、および(ほとんどのプラットフォームで)QPixmap といった描画デバイスへの描画に使用できます。QWidgetへの描画はサポートされていません。macOSでは、GUIスレッドの外側から描画を行う場合、自動進行状況ダイアログは表示されません。
任意の数のスレッドが同時に描画を行うことは可能ですが、特定の描画デバイスに対して描画を行えるのは一度に1つのスレッドのみです。つまり、2つのスレッドがそれぞれ別のQImageに描画を行う場合は同時に描画できますが、2つのスレッドが同じQImage に同時に描画を行うことはできません。
スレッドとリッチテキスト処理
QTextDocument 、QTextCursor 、およびこれらに関連するすべてのクラスは再入可能です。
GUI スレッドで作成されたQTextDocument インスタンスには、QPixmap 画像リソースが含まれている場合があることに注意してください。QTextDocument::clone() を使用してドキュメントのコピーを作成し、そのコピーを別のスレッドに渡して、さらなる処理(印刷など)を行ってください。
スレッドとSVGモジュール
QtSvg モジュール内のQSvgGenerator クラスおよびQSvgRenderer クラスは再入可能である。
スレッドと暗黙的に共有されるクラス
Qt では、多くの値型クラス(特にQImage およびQString )に対して、暗黙的共有と呼ばれる最適化が使用されています。Qt 4 以降、暗黙的共有クラスは他の値型クラスと同様に、スレッド間で安全にコピーできます。これらは完全に再入可能です。この暗黙的共有は、文字通り「暗黙的」です。
多くの人は、参照カウントの一般的な処理方法から、暗黙的共有とマルチスレッドは相容れない概念だと考えています。しかし、Qtでは、共有データの整合性を確保するためにアトミックな参照カウントを使用しており、参照カウンタの破損の可能性を回避しています。
なお、アトミック参照カウントはスレッドセーフ性を保証するものではないことに注意してください。暗黙的に共有されるクラスのインスタンスをスレッド間で共有する際は、適切なロックを使用する必要があります。これは、共有の有無にかかわらず、すべての再入可能クラスに課される要件と同じです。 ただし、アトミックな参照カウントは、暗黙的に共有されるクラスの独自のローカルインスタンスを扱うスレッドの安全性を保証します。スレッド間でデータをやり取りする際には、明示的なロックを必要とせずに実行できるため、シグナルとスロットの使用を推奨します。
要約すると、Qt 4 の暗黙的に共有されるクラスは、真に暗黙的に共有されています。マルチスレッドアプリケーションであっても、それらを、あたかも単純な、非共有の、再入可能で値ベースのクラスであるかのように安全に使用できます。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.