Qt for Windows - 特定の問題

このページではQt for Windows に関する情報を提供します。

インストール場所

Qtをスペースのあるディレクトリ、例えばC:¥Program Filesにインストールすると、qmakeで問題が発生する可能性があります。

この問題を避けるために、Qt を空白のないサブディレクトリにインストールしてください。

パスの最大長

Qt とコンパイラツールの両方が使用する Win32 API には、260 文字 (MAX_PATH) の最大ファイルパス長が組み込まれています。これは、絶対パスや相対パスのディレクトリ構造が冗長すぎる場合、様々な形であなたを苦しめる可能性があります。したがって、ファイルシステムのパスを制限内に保ち、ビルド・ディレクトリをソース・ディレクトリの近くに置くことをお勧めします。

ビジュアル・スタジオ

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

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

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

ウィンドウがOpenGLベースのサーフェスを使用できるのは、setSurfaceType()が呼び出されたときに明示的に使用されるか、ウィンドウ内部でOpenGLを必要とする何かが使用され、ウィンドウ全体がOpenGLベースになる場合です。例えば、QOpenGLWidgetQQuickWidget がこのトリガーになります。しかし、サーフェスが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ピクセルの境界線が与えられ、他のトップレベルウィンドウが上に表示されるようになります。

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