QScreenCapture Class
このクラスは、画面をキャプチャするために使用されます。詳細...
| ヘッダー: | #include <QScreenCapture> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Multimedia) target_link_libraries(mytarget PRIVATE Qt6::Multimedia) |
| qmake: | QT += multimedia |
| 以下のように: | Qt 6.5 |
| QMLにおける: | ScreenCapture |
| 継承元: | QObject |
パブリック型
| enum | Error { NoError, InternalError, CapturingNotSupported, CaptureFailed, NotFound } |
プロパティ
|
|
パブリック関数
| QMediaCaptureSession * | captureSession() const |
| QScreenCapture::Error | error() const |
| QString | errorString() const |
| bool | isActive() const |
| std::optional<qreal> | maximumFrameRate() const |
| QScreen * | screen() const |
| void | setMaximumFrameRate(std::optional<qreal> frameRate) |
| void | setScreen(QScreen *screen) |
パブリック・スロット
シグナル
| void | activeChanged(bool) |
| void | errorChanged() |
| void | errorOccurred(QScreenCapture::Error error, const QString &errorString) |
| void | maximumFrameRateChanged() |
| void | screenChanged(QScreen *) |
詳細な説明
このクラスは画面をキャプチャします。このクラスはQMediaCaptureSession クラスによって管理され、キャプチャされた画面はビデオプレビューオブジェクトに表示したり、ファイルに記録したりすることができます。
以下のスニペットは、プライマリ画面をキャプチャし、その結果をQVideoWidget に表示する方法を示しています:
QMediaCaptureSession session;
QScreenCapture screenCapture;
session.setScreenCapture(&screenCapture);
QVideoWidget videoWidget;
session.setVideoOutput(&videoWidget);
videoWidget.show();
// With no screen set, the primary screen is captured once capturing starts.
screenCapture.start();画面キャプチャの制限事項
Qt 6.5.2 以降では、QScreenCapture の使用に関して以下の制限が適用されます:
- FFmpegバックエンドでのみサポートされています。
- 一部のプラットフォームでは、キャプチャされた画面の内容が変更されない間、新しいビデオフレームが出力されません。したがって、アプリケーションは、要求されたフレームレートでフレームの連続ストリームを受信できることを前提にしてはなりません。
- Waylandコンポジターを使用するLinuxシステムでは、スクリーンキャプチャの実装は実験的なものであり、以下の制限があります。Waylandプロトコルの制約により、
QScreenCaptureクラスのAPIを介してターゲット画面を設定または取得することはできません。 その代わり、QScreenCapture::setActive(true)を呼び出すと、OSによって画面選択ウィザードが表示されます。画面キャプチャ機能を利用するには、XDG Desktop PortalおよびPipeWire(0.3) を通じてサポートされているScreenCastサービスのインストールが必要です。これらの制限事項は将来変更される可能性があります。 - Androidを除くモバイルOSではサポートされていません。Androidでのスクリーンキャプチャには、
AndroidManifest.xmlファイルにAndroidのフォアグラウンドサービス権限を追加する必要があります:<manifest ...> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" /> <application ...> <service android:name="org.qtproject.qt.android.multimedia.QtScreenCaptureService" android:foregroundServiceType="mediaProjection" android:exported="false"/> </service> </application> </manifest> - EGLFSを搭載した組み込み環境では、機能が制限されます。Qt Quick アプリケーションの場合、このクラスは現在QQuickWindow::grabWindow を通じて実装されており、パフォーマンスの問題を引き起こす可能性があります。
- ほとんどの場合、スクリーンキャプチャのフレームレートは画面のリフレッシュレートと同じに設定されますが、Windows ではレートが柔軟になる場合があります。このようなフレームレート(75/120 FPS)では、キャプチャ対象の画面が 4K 解像度の場合、性能の低い CPU ではパフォーマンスの問題が発生する可能性があります。 EGLFSでは、キャプチャのフレームレートは現在30 FPSに固定されています。
QWindowCapture およびQMediaCaptureSessionも参照してください 。
メンバ型のドキュメント
enum QScreenCapture::Error
QScreenCapture クラスが発生させる可能性のあるエラーコードを列挙します。errorString() は、エラーの原因に関する詳細情報を提供します。
| 定数 | 値 | 説明 |
|---|---|---|
QScreenCapture::NoError | 0 | エラーなし |
QScreenCapture::InternalError | 1 | 内部のスクリーンキャプチャドライバエラー |
QScreenCapture::CapturingNotSupported | 2 | キャプチャはサポートされていません |
QScreenCapture::CaptureFailed | 4 | 画面のキャプチャに失敗しました |
QScreenCapture::NotFound | 5 | 選択した画面が見つかりません |
プロパティのドキュメント
active : bool
このプロパティは、キャプチャが現在アクティブであるかどうかを表します。
アクセス関数:
| bool | isActive() const |
| void | setActive(bool active) |
通知シグナル:
| void | activeChanged(bool) |
[read-only] error : Error
このプロパティには、直近のエラーのコードが格納されます。
アクセス関数:
| QScreenCapture::Error | error() const |
通知シグナル:
| void | errorChanged() |
[read-only] errorString : QString
このプロパティには、エラーの原因を説明する、人間が読み取れる文字列が格納されます。
アクセス関数:
| QString | errorString() const |
通知シグナル:
| void | errorChanged() |
[since 6.12] maximumFrameRate : std::optional<qreal>
このプロパティは、スクリーンキャプチャのフレームレートの上限値を指定します。
これは、例えばディスプレイのリフレッシュレートに基づいてデフォルトで使用されるキャプチャフレームレートを上書きするように設定できますが、スクリーンキャプチャは可変レートでフレームを生成するため、あくまで上限値としてのみ機能します。これをディスプレイのリフレッシュレートよりも高く設定することは推奨されず、エラーの原因となる可能性があります。
このプロパティへの変更は、QScreenCapture が次にアクティブになったときに反映されます。
この列挙型は Qt 6.12 で導入されました。
アクセス関数:
| std::optional<qreal> | maximumFrameRate() const |
| void | setMaximumFrameRate(std::optional<qreal> frameRate) |
Notifierシグナル:
| void | maximumFrameRateChanged() |
screen : QScreen*
このプロパティは、キャプチャ対象の画面を指定します。
nullQScreen が設定されている場合、QScreenCapture インスタンスがアクティブになると、QGuiApplication::primaryScreen が選択されます。
アクセス関数:
| QScreen * | screen() const |
| void | setScreen(QScreen *screen) |
Notifierシグナル:
| void | screenChanged(QScreen *) |
関連項目: ` QGuiApplication::screens()` および `QGuiApplication::primaryScreen()`。
メンバ関数のドキュメント
QMediaCaptureSession *QScreenCapture::captureSession() const
このQScreenCapture が接続されているキャプチャセッションを返します。
QMediaCaptureSession::setScreenCapture() を使用して、スクリーンキャプチャをセッションに接続します。
[signal] void QScreenCapture::errorChanged()
このシグナルは、error またはerrorString プロパティが変更されたときに発生します。
同一のエラーが複数回発生した場合、このシグナルは発行されません。そのようなエラーを追跡するには、errorOccurred シグナルを使用してください。
注: error およびerrorString プロパティの通知 シグナルです。
[signal] void QScreenCapture::errorOccurred(QScreenCapture::Error error, const QString &errorString)
error が発生した際に、errorString と共に通知を行います。
[slot] void QScreenCapture::start()
screen のキャプチャを開始します。
これは、active プロパティをtrueに設定することと同じです。
[slot] void QScreenCapture::stop()
キャプチャを停止します。
これは、active プロパティをfalseに設定するのと同じです。
© 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.