QQuickWidget Class
QQuickWidget クラスは、Qt Quick のユーザーインターフェースを表示するためのウィジェットを提供します。詳細...
| ヘッダー: | #include <qquickwidget.h> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS QuickWidgets) target_link_libraries(mytarget PRIVATE Qt6::QuickWidgets) |
| qmake: | QT += quickwidgets |
| 継承元: | QWidget |
パブリック型
| enum | ResizeMode { SizeViewToRootObject, SizeRootObjectToView } |
| enum | Status { Null, Ready, Loading, Error } |
プロパティ
- resizeMode : ResizeMode
- source : QUrl
- status : Status
パブリック関数
| QQuickWidget(QWidget *parent = nullptr) | |
| QQuickWidget(QQmlEngine *engine, QWidget *parent) | |
| QQuickWidget(const QUrl &source, QWidget *parent = nullptr) | |
(since 6.9) | QQuickWidget(QAnyStringView uri, QAnyStringView typeName, QWidget *parent = nullptr) |
| virtual | ~QQuickWidget() override |
| QQmlEngine * | engine() const |
| QList<QQmlError> | errors() const |
| QSurfaceFormat | format() const |
| QImage | grabFramebuffer() const |
| QSize | initialSize() const |
| QQuickWindow * | quickWindow() const |
| QQuickWidget::ResizeMode | resizeMode() const |
| QQmlContext * | rootContext() const |
| QQuickItem * | rootObject() const |
| void | setClearColor(const QColor &color) |
| void | setFormat(const QSurfaceFormat &format) |
| void | setResizeMode(QQuickWidget::ResizeMode) |
| QUrl | source() const |
| QQuickWidget::Status | status() const |
パブリックスロット
(since 6.9) void | loadFromModule(QAnyStringView uri, QAnyStringView typeName) |
(since 6.9) void | setInitialProperties(const QVariantMap &initialProperties) |
| void | setSource(const QUrl &url) |
シグナル
| void | sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message) |
| void | statusChanged(QQuickWidget::Status status) |
再実装された保護関数
| virtual void | dragEnterEvent(QDragEnterEvent *e) override |
| virtual void | dragLeaveEvent(QDragLeaveEvent *e) override |
| virtual void | dragMoveEvent(QDragMoveEvent *e) override |
| virtual void | dropEvent(QDropEvent *e) override |
| virtual bool | event(QEvent *e) override |
| virtual void | focusInEvent(QFocusEvent *event) override |
| virtual bool | focusNextPrevChild(bool next) override |
| virtual void | focusOutEvent(QFocusEvent *event) override |
| virtual void | hideEvent(QHideEvent *) override |
| virtual void | keyPressEvent(QKeyEvent *e) override |
| virtual void | keyReleaseEvent(QKeyEvent *e) override |
| virtual void | mouseDoubleClickEvent(QMouseEvent *e) override |
| virtual void | mouseMoveEvent(QMouseEvent *e) override |
| virtual void | mousePressEvent(QMouseEvent *e) override |
| virtual void | mouseReleaseEvent(QMouseEvent *e) override |
| virtual void | paintEvent(QPaintEvent *event) override |
| virtual void | showEvent(QShowEvent *) override |
| virtual void | wheelEvent(QWheelEvent *e) override |
詳細な説明
これは、QQuickWindow の利便性を高めるラッパーであり、メインソースファイルの URL を指定すると、QML シーンを自動的に読み込んで表示します。あるいは、QQmlComponent を使用して独自のオブジェクトをインスタンス化し、手動で設定した QQuickWidget に配置することもできます。
一般的な使用方法:
QQuickWidget *view = new QQuickWidget;
view->setSource(QUrl::fromLocalFile("myqmlfile.qml"));
view->show();QQuickWidget を使用した QML の読み込みおよび実行に関連するエラーを受け取るには、statusChanged() シグナルに接続し、QQuickWidget::Error を監視します。エラーはQQuickWidget::errors() を通じて取得できます。
QQuickWidgetは、ビューおよびルートオブジェクトのサイズ調整も管理します。デフォルトでは、resizeMode はSizeViewToRootObject に設定されており、これによりコンポーネントが読み込まれ、ビューのサイズに合わせてリサイズされます。あるいは、resizeMode をSizeRootObjectToView に設定することで、ビューをルートオブジェクトのサイズに合わせてリサイズすることも可能です。
パフォーマンスに関する考慮事項
QQuickWidgetは、QQuickView およびQWidget::createWindowContainer()を使用する代わりに利用できます。スタック順序に関する制限が適用されないため、QQuickWidgetはより柔軟な選択肢となり、通常のウィジェットに近い挙動を示します。
ただし、上記の利点にはパフォーマンス上の代償が伴います。
- QQuickWindow やQQuickView とは異なり、QQuickWidget では、オフスクリーンのカラーバッファ(通常は 2D テクスチャ)を対象とした少なくとも 1 回の追加のレンダリングパスが必要となり、その後テクスチャクワッドが描画されます。これは、特に GPU のフラグメント処理における負荷の増加を意味します。
- QQuickWidget を使用すると、すべてのプラットフォームでスレッド化されたレンダリングループが無効になります。これにより、Animator クラスや vsync によるアニメーションなど、スレッド化されたレンダリングの利点の一部が利用できなくなります。
注: QQuickWidget 上でwinId() を呼び出さないでください 。この関数はネイティブウィンドウの作成をトリガーするため、パフォーマンスの低下やレンダリングの不具合を引き起こす可能性があります。QQuickWidget の本来の目的は、個別のネイティブウィンドウを使用せずに Quick シーンをレンダリングすることにあるため、これをネイティブウィジェットとして扱うことは常に避けるべきです。
グラフィックス API のサポート
QQuickWidgetは、Qt Quick がサポートするすべての3DグラフィックスAPIおよびsoftware バックエンドで動作します。一方、OpenVGなどの他のバックエンドとは互換性がなく、QQuickWidgetの構築を試みると問題が発生します。
プラットフォームのデフォルトのグラフィックスAPIを上書きする方法は、QQuickWindow やQQuickView の場合と同様です。つまり、最初のQQuickWidgetを構築する直前にQQuickWindow::setGraphicsApi()を呼び出すか、QSG_RHI_BACKEND 環境変数を設定します。
注:1つの トップレベルウィンドウでは、レンダリングに1つのグラフィックスAPIしか使用できません。たとえば、同じトップレベルウィンドウのウィジェット階層内に、Vulkanを使用するQQuickWidgetとQOpenGLWidget を使用するQQuickWidgetを配置しようとすると、問題が発生し、いずれかのウィジェットが期待どおりにレンダリングされなくなります。
シーングラフとコンテキストの永続性
QQuickWidgetはQQuickWindow::isPersistentSceneGraph()を尊重します。つまり、アプリケーションは、quickWindow()関数から返されたウィンドウに対してQQuickWindow::setPersistentSceneGraph()を呼び出すことで、ウィジェットが非表示になった際にシーングラフノードやその他のQt Quick シーン関連リソースを解放するように指定できます。デフォルトでは、QQuickWindow と同様に、永続化が有効になっています。
OpenGL を使用して実行する場合、QQuickWindow では、永続的な OpenGL コンテキストを無効にすることも可能です。この設定は現在 QQuickWidget によって無視されており、コンテキストは常に永続的です。 したがって、ウィジェットを非表示にしても OpenGL コンテキストは破棄されません。コンテキストが破棄されるのは、ウィジェットが破棄されたとき、またはウィジェットが別のトップレベルウィジェットの子階層に再配置されたときのみです。 ただし、一部のアプリケーション、特にQt Quick シーン内でカスタムOpenGLレンダリングを実行するために独自のグラフィックリソースを持つアプリケーションでは、QQuickWidgetを別のウィンドウに移動した際にコンテキストが失われる事態に対処する準備ができていない可能性があるため、後者の機能を無効にしたい場合があります。そのようなアプリケーションでは、QCoreApplication::AA_ShareOpenGLContexts属性を設定することができます。 リソースの初期化およびクリーンアップの詳細については、『QOpenGLWidget 』のドキュメントを参照してください。
注:QQuickWidgetは、 QOpenGLWidget に比べて内部のOpenGLコンテキストに対する制御が粗く、微妙な違いがあります。特に、永続的なシーングラフを無効にすると、QCoreApplication::AA_ShareOpenGLContextsの設定の有無にかかわらず、ウィンドウ変更時にコンテキストが破棄されてしまう点が顕著です。
制限事項
他のウィジェットを下に配置し、QQuickWidget を透明にしても、期待通りの結果にはなりません。つまり、下にあるウィジェットは表示されません。これは、実際には QQuickWidget が他のすべての通常の(OpenGL 以外の)ウィジェットよりも先に描画されるためであり、そのため、透過的な解決策は実現不可能です。 QQuickWidgetの上にウィジェットを配置するなどの、他の種類のレイアウトは期待通りに機能します。
どうしても必要な場合は、QQuickWidget のQt::WA_AlwaysStackOnTop 属性を設定することで、この制限を回避することができます。ただし、これによりスタック順が崩れてしまうことに注意してください。 たとえば、QQuickWidget の上に他のウィジェットを配置することはできなくなるため、この設定は、半透明の QQuickWidget の下に他のウィジェットを表示する必要がある場合にのみ使用すべきです。
この制限は、同じウィンドウ内の QQuickWidget の下に他のウィジェットが存在する場合にのみ適用されます。ウィンドウを半透明にして、背景にある他のアプリケーションやデスクトップが見えるようにするには、従来の方法を使用します。つまり、最上位のウィンドウで `Qt::WA_TranslucentBackground ` を設定し、アルファチャンネルを要求し、setClearColor() を使用して、Qt Quick シーングラフのクリアカラーを `Qt::transparent ` に変更します。
「C++ 型の属性を QML に公開する」、「Qt Quick ウィジェットの例」、および「QQuickView 」も参照してください 。
メンバ型のドキュメント
enum QQuickWidget::ResizeMode
この列挙型は、ビューのサイズ変更方法を指定します。
| 定数 | 値 | 説明 |
|---|---|---|
QQuickWidget::SizeViewToRootObject | 0 | ビューは、QML 内のルートアイテムに合わせてサイズ変更されます。 |
QQuickWidget::SizeRootObjectToView | 1 | ビューは、ルートアイテムのサイズをビューのサイズに合わせて自動的に変更します。 |
enum QQuickWidget::Status
QQuickWidget の読み込み状態を指定します。
| 定数 | 値 | 説明 |
|---|---|---|
QQuickWidget::Null | 0 | このQQuickWidget にはソースが設定されていません。 |
QQuickWidget::Ready | 1 | このQQuickWidget にはソースが設定されていません。この は、QMLコンポーネントを読み込んで作成しました。 |
QQuickWidget::Loading | 2 | このQQuickWidget はネットワークデータを読み込んでいます。 |
QQuickWidget::Error | 3 | 1 つ以上のエラーが発生しました。errors() を呼び出して、エラーのリストを取得してください。 |
プロパティのドキュメント
resizeMode : ResizeMode
ビューがウィンドウの内容のサイズを変更するかどうかを指定します。
このプロパティがSizeViewToRootObject (デフォルト)に設定されている場合、ビューはQML内のルート項目のサイズに合わせてサイズ変更されます。
このプロパティが `SizeRootObjectToView` に設定されている場合、ビューはルートアイテムのサイズをビューのサイズに合わせて自動的に調整します。
このプロパティの設定にかかわらず、ビューの sizeHint はルート項目の初期サイズとなります。ただし、QML は動的に読み込まれる場合があるため、そのサイズは変更される可能性があることに注意してください。
アクセス関数:
| QQuickWidget::ResizeMode | resizeMode() const |
| void | setResizeMode(QQuickWidget::ResizeMode) |
initialSize()も参照してください 。
source : QUrl
このプロパティには、QMLコンポーネントのソースのURLが格納されます。
指定するURLが完全かつ正確であることを確認してください。特に、ローカルファイルシステムからファイルを読み込む場合は、QUrl::fromLocalFile() を使用してください。
注: ソース URL を設定すると 、その URL が現在の値から変更されていない場合でも、QML コンポーネントがインスタンス化されます。
アクセス関数:
[read-only] status : Status
コンポーネントの現在のstatus 。
アクセス関数:
| QQuickWidget::Status | status() const |
通知信号:
| void | statusChanged(QQuickWidget::Status status) |
メンバ関数のドキュメント
[explicit] QQuickWidget::QQuickWidget(QWidget *parent = nullptr)
parent の子要素として、デフォルトのQMLエンジンを備えたQQuickWidgetを作成します。
parent のデフォルト値はnullptr です。
QQuickWidget::QQuickWidget(QQmlEngine *engine, QWidget *parent)
指定されたQMLのengine をparent の子要素として持つQQuickWidgetを構築します。
注: QQuickWidgetは 、指定されたengine オブジェクトの所有権を取得しません。エンジンの破棄は呼び出し側の責任となります。engine がビューよりも先に削除された場合、status()はQQuickWidget::Error を返します。
[explicit] QQuickWidget::QQuickWidget(const QUrl &source, QWidget *parent = nullptr)
デフォルトのQMLエンジンと、指定されたQMLsource を持つQQuickWidgetを、parent の子として生成します。
parent のデフォルト値はnullptr です。
[explicit, since 6.9] QQuickWidget::QQuickWidget(QAnyStringView uri, QAnyStringView typeName, QWidget *parent = nullptr)
uri およびtypeName で指定された要素と、親要素parent を持つ QQuickWidget を生成します。parent のデフォルト値はnullptr です。
この関数は Qt 6.9 で導入されました。
loadFromModuleも参照してください 。
[override virtual noexcept] QQuickWidget::~QQuickWidget()
QQuickWidget を削除します。
[override virtual protected] void QQuickWidget::dragEnterEvent(QDragEnterEvent *e)
QWidget::dragEnterEvent (QDragEnterEvent *event)を再実装します。
[override virtual protected] void QQuickWidget::dragLeaveEvent(QDragLeaveEvent *e)
QWidget::dragLeaveEvent(QDragLeaveEvent *event) を再実装します。
[override virtual protected] void QQuickWidget::dragMoveEvent(QDragMoveEvent *e)
QWidget::dragMoveEvent(QDragMoveEvent *event) を再実装します。
[override virtual protected] void QQuickWidget::dropEvent(QDropEvent *e)
QWidget::dropEvent (QDropEvent *event)を再実装しています。
QQmlEngine *QQuickWidget::engine() const
QMLコンポーネントのインスタンス化に使用されるQQmlEngine へのポインタを返します。
QList<QQmlError> QQuickWidget::errors() const
前回のコンパイルまたは作成操作中に発生したエラーのリストを返します。ステータスがError でない場合は、空のリストが返されます。
「status」も参照してください 。
[override virtual protected] bool QQuickWidget::event(QEvent *e)
QWidget::event(QEvent *event) を再実装します。
[override virtual protected] void QQuickWidget::focusInEvent(QFocusEvent *event)
QWidget::focusInEvent(QFocusEvent *event) を再実装します。
[override virtual protected] bool QQuickWidget::focusNextPrevChild(bool next)
QWidget::focusNextPrevChild (bool next)を再実装します。
[override virtual protected] void QQuickWidget::focusOutEvent(QFocusEvent *event)
QWidget::focusOutEvent (QFocusEvent *event)を再実装します。
QSurfaceFormat QQuickWidget::format() const
実際のサーフェス形式を返します。
ウィジェットがまだ表示されていない場合、指定されたフォーマットが返されます。
setFormat()も参照してください 。
QImage QQuickWidget::grabFramebuffer() const
フレームをレンダリングし、それを画像として読み込みます。
注:これは 処理負荷が高くなる可能性があります。
[override virtual protected] void QQuickWidget::hideEvent(QHideEvent *)
QWidget::hideEvent(QHideEvent *event) を再実装します。
QSize QQuickWidget::initialSize() const
ルートオブジェクトの初期サイズを返します。
resizeMode がSizeRootObjectToView の場合、ルートオブジェクトはビューのサイズに合わせてリサイズされます。この関数は、リサイズされる前のルートオブジェクトのサイズを返します。
[override virtual protected] void QQuickWidget::keyPressEvent(QKeyEvent *e)
QWidget::keyPressEvent(QKeyEvent *event) を再実装します。
[override virtual protected] void QQuickWidget::keyReleaseEvent(QKeyEvent *e)
QWidget::keyReleaseEvent(QKeyEvent *event) を再実装します。
[slot, since 6.9] void QQuickWidget::loadFromModule(QAnyStringView uri, QAnyStringView typeName)
uri およびtypeName で指定された QML コンポーネントを読み込みます。コンポーネントが QML ファイルに基づいている場合、source はそれに応じて設定されます。C++ で定義された型の場合、source は空になります。
このメソッドが呼び出される前にsource が設定されていた場合、その値はクリアされます。
同じuri およびtypeName を指定してこのメソッドを複数回呼び出すと、QML コンポーネントが再インスタンス化されます。
この関数は Qt 6.9 で導入されました。
setSource 、QQmlComponent::loadFromModule 、およびQQmlApplicationEngine::loadFromModuleも参照してください 。
[override virtual protected] void QQuickWidget::mouseDoubleClickEvent(QMouseEvent *e)
QWidget::mouseDoubleClickEvent(QMouseEvent *event) を再実装しています。
[override virtual protected] void QQuickWidget::mouseMoveEvent(QMouseEvent *e)
QWidget::mouseMoveEvent(QMouseEvent *event) を再実装します。
[override virtual protected] void QQuickWidget::mousePressEvent(QMouseEvent *e)
QWidget::mousePressEvent(QMouseEvent *event) の再実装です。
[override virtual protected] void QQuickWidget::mouseReleaseEvent(QMouseEvent *e)
QWidget::mouseReleaseEvent(QMouseEvent *event) を再実装します。
[override virtual protected] void QQuickWidget::paintEvent(QPaintEvent *event)
QWidget::paintEvent (QPaintEvent *event)を再実装します。
QQuickWindow *QQuickWidget::quickWindow() const
このウィジェットがQt Quick のレンダリングを制御するために使用する、オフスクリーンのQQuickWindow を返します。これは、QQuickWidget で現在公開されていないQQuickWindow APIを使用したい場合に役立ちます。例えば、Qt Quick 自身のレンダリングの下にネイティブなOpenGLコンテンツを描画するために、QQuickWindow::beforeRendering()シグナルに接続する場合などが挙げられます。
警告: この関数の戻り値の使用には 注意が必要です。特に、QQuickWindow を表示しようとしないでください。また、QWindow 専用の他のAPIを使用する際は細心の注意を払ってください。
警告: オフスクリーンウィンドウは 、QQuickWidget の存続期間中、特にウィジェットが別のQQuickWindow に移動された際に、削除(および再作成)される可能性があります。ウィンドウが置き換えられたことを把握する必要がある場合は、そのdestroyed()シグナルに接続してください。
QQmlContext *QQuickWidget::rootContext() const
この関数は、コンテキスト階層のルート返します。各QMLコンポーネントは、QQmlContext 内でインスタンス化されます。QQmlContext は、QMLコンポーネントにデータを渡すために不可欠です。QMLでは、コンテキストは階層的に配置されており、この階層はQQmlEngine によって管理されています。
QQuickItem *QQuickWidget::rootObject() const
ビューのルートitem を返します。setSource()が呼び出されていない場合、QtQuick のコードに不具合がある状態で呼び出された場合、またはルートアイテムが何らかの理由で未定義である場合、nullptr が返されることがあります。
[signal] void QQuickWidget::sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message)
このシグナルは、シーングラフの初期化中にerror が発生した際に発火します。
OpenGLコンテキストの作成失敗などのエラーを独自の方法で処理したい場合は、アプリケーションはこのシグナルに接続する必要があります。このシグナルにスロットが接続されていない場合、動作は異なります。Quickはmessage を出力するか、メッセージボックスを表示し、アプリケーションを終了します。
このシグナルはGUIスレッドから発信されます。
QQuickWindow::sceneGraphError()も参照してください 。
void QQuickWidget::setClearColor(const QColor &color)
color を透明に設定します。デフォルトでは不透明な色になります。
半透明のQQuickWidget を取得するには、color をQt::transparent に設定してこの関数を呼び出し、最上位ウィンドウのQt::WA_TranslucentBackground ウィジェット属性を設定し、setFormat()を介してアルファチャンネルを要求します。
QQuickWindow::setColor()も参照してください 。
void QQuickWidget::setFormat(const QSurfaceFormat &format)
このウィジェットで使用されるコンテキストおよびオフスクリーンサーフェスのサーフェスformat を設定します。
特定の OpenGL バージョンまたはプロファイルのコンテキストを要求する必要がある場合は、この関数を呼び出してください。深度バッファ、ステンシルバッファ、アルファバッファのサイズは自動的に処理されるため、それらを明示的に要求する必要はありません。
QWindow::setFormat()、QWindow::format()、およびformat()も参照してください 。
[slot, since 6.9] void QQuickWidget::setInitialProperties(const QVariantMap &initialProperties)
QQuickWidget::setSource() を呼び出した後に、QML コンポーネントが初期化される際の初期プロパティinitialProperties を設定します。
注: この関数は、トップレベルのプロパティを初期化するためにのみ使用できます 。
注:この関数は 、コンポーネントが `Ready` 状態になると効果がなくなるため、常に `setSource` の前に呼び出す必要があります。
この関数は Qt 6.9 で導入されました。
「QQmlComponent::createWithInitialProperties()」も参照してください 。
[slot] void QQuickWidget::setSource(const QUrl &url)
ソースをurl に設定し、QML コンポーネントを読み込んでインスタンス化します。
指定するURLが完全かつ正確であることを確認してください。特に、ローカルファイルシステムからファイルをロードする際は、QUrl::fromLocalFile() を使用してください。
同じ URL でこのメソッドを複数回呼び出すと、QML コンポーネントが再インスタンス化されます。
注: プロパティ `source`のセッター 関数です。
source()も参照してください 。
[override virtual protected] void QQuickWidget::showEvent(QShowEvent *)
QWidget::showEvent(QShowEvent *event) を再実装します。
QUrl QQuickWidget::source() const
設定されている場合、ソースURLを返します。
注: プロパティ `source`のゲッター 関数です。
関連項目: setSource()。
[signal] void QQuickWidget::statusChanged(QQuickWidget::Status status)
このシグナルは、コンポーネントの現在のstatus が変更されたときに発信されます。
注: プロパティ `status` に対する通知 信号です。
[override virtual protected] void QQuickWidget::wheelEvent(QWheelEvent *e)
QWidget::wheelEvent(QWheelEvent *event) の再実装です。
© 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.