このページでは

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 setActive(bool active)
void start()
void stop()

シグナル

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::NoError0エラーなし
QScreenCapture::InternalError1内部のスクリーンキャプチャドライバエラー
QScreenCapture::CapturingNotSupported2キャプチャはサポートされていません
QScreenCapture::CaptureFailed4画面のキャプチャに失敗しました
QScreenCapture::NotFound5選択した画面が見つかりません

プロパティのドキュメント

active : bool

このプロパティは、キャプチャが現在アクティブであるかどうかを表します。

アクセス関数:

bool isActive() const
void setActive(bool active)

通知シグナル:

void activeChanged(bool)

start() およびstop()も参照してください 。

[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.