このページでは

Windows 向け Qt - 具体的な問題

このページには、Windows 版 Qt に関する情報が記載されています。

インストール先

C:\Program Files など、スペースを含むディレクトリに Qt をインストールすると、qmake で問題が発生する可能性があります。

この問題を回避するには、スペースを含まないサブディレクトリに Qt をインストールしてください。

パスの最大長

Qt およびコンパイラツールが使用する Win32 API には、ファイルパスの最大長が 260 文字に制限されています (MAX_PATH)。絶対パスまたは相対パスのディレクトリ構造が冗長すぎると、さまざまな形でこの制限に引っかかる可能性があります。 したがって、ファイルシステムのパスは制限内に収め、ビルドディレクトリはソースディレクトリの近くに配置することをお勧めします。

Visual Studio

構造体やユニオンのメンバーのアラインメントを変更する特別なフラグ(/Zp2 など)を使用する際に奇妙な問題が発生する場合は、アプリケーション用に設定されたフラグを使用して Qt を再コンパイルする必要があります。

フルスクリーンの OpenGL ベースのウィンドウ

ウィンドウが OpenGL ベースのサーフェスを使用しており、フルスクリーンモードで表示されている場合、アプリケーションを構成する他のトップレベルウィンドウで問題が発生することがあります。Windows DWM の制限により、フルスクリーンモードに入ると、OpenGL ベースのウィンドウのコンポジットが正しく処理されません。 その結果、他のトップレベルウィンドウが表示されても、フルスクリーンウィンドウの上に配置されません。例えば、メニューが正しく表示されない、あるいはダイアログが表示されないといった現象が発生する可能性があります。

ウィンドウが OpenGL ベースのサーフェスを使用するのは、setSurfaceType() が明示的に呼び出された場合、あるいはウィンドウ内で OpenGL を必要とする処理が使用され、ウィンドウ全体が OpenGL ベースになる場合です。 たとえば、QOpenGLWidget やQQuickWidget がこれを引き起こす可能性があります。ただし、そのサーフェスがcreateWindowContainer()でホストされているQWindow に含まれている場合、または廃止予定のQGLWidgetが使用されており、それがフルスクリーンウィンドウ全体を覆っている場合は、この問題は発生しません。

この問題を解決するには、ネイティブAPIを使用して、フルスクリーンモードで表示する際にWS_BORDER 属性を有効にすることができます。これは次のように利用できます:

bool Widget::event(QEvent *e) {
#if defined(Q_OS_WIN)
    if (e->type() == QEvent::WinIdChange) {
        if (windowHandle()) {
            HWND handle = reinterpret_cast<HWND>(windowHandle()->winId());
            SetWindowLongPtr(handle, GWL_STYLE, GetWindowLongPtr(handle, GWL_STYLE) | WS_BORDER);
        }
    }
#endif
    return QWidget::event(e);
}

これにより、全画面ウィンドウに1ピクセルの境界線が付与され、他のトップレベルウィンドウが上に表示されるようになります。

OLEの初期化

Qtは、ドラッグやクリップボードへのアクセスなどの機能をサポートするために、Windows上でOLEを使用します。OLEを使用するには、QtがOleInitializeを呼び出す必要があります。これにより、スレッドの並行処理モデルがCOINIT_APARTMENTTHREADED に設定されます。

UIスレッドでCoInitializeEx またはwinrt::init_apartment を呼び出し、シングルスレッド・アパートメント以外の並行実行モデル(それぞれCOINIT_APARTMENTTHREADED またはwinrt::apartment_type::single_threaded )を指定すると、バグやアプリケーションのハングアップを引き起こす可能性があります。

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