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ピクセルのボーダーが与えられ、他のトップレベルウィンドウが上に表示されるようになります。

©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。