Sur cette page

Qt pour Windows - Problèmes spécifiques

Cette page contient des informations sur Qt pour Windows.

Emplacement d'installation

L'installation de Qt dans un répertoire contenant des espaces, par exemple C:\Program Files, peut entraîner des problèmes avec qmake.

Installez Qt dans un sous-répertoire ne contenant pas d'espaces pour éviter ce problème.

Longueur maximale du chemin d’accès

L'API Win32 utilisée à la fois par Qt et par les outils de compilation impose une longueur maximale de 260 caractères pour les chemins d'accès aux fichiers (MAX_PATH). Cela peut vous poser divers problèmes si vos structures de répertoires, qu'elles soient absolues ou relatives, sont trop longues. Il est donc recommandé de respecter ces limites pour les chemins d’accès au système de fichiers et de placer les répertoires de compilation à proximité des répertoires source.

Visual Studio

Si vous rencontrez des problèmes inhabituels lors de l’utilisation de drapeaux spéciaux modifiant l’alignement des membres de structures et d’unions (tels que /Zp2), vous devrez recompiler Qt en définissant également ces drapeaux pour l’application.

Fenêtres en plein écran basées sur OpenGL

Lorsqu’une fenêtre utilise une surface basée sur OpenGL et s’affiche en mode plein écran, des problèmes peuvent survenir avec d’autres fenêtres de niveau supérieur faisant partie de l’application. En raison des limitations du DWM de Windows, la superposition n’est pas gérée correctement pour les fenêtres basées sur OpenGL lorsqu’elles passent en mode plein écran. Par conséquent, les autres fenêtres de premier plan ne sont pas superposées à la fenêtre en plein écran lorsqu’elles sont rendues visibles. Par exemple, les menus peuvent ne pas s’afficher correctement, ou les boîtes de dialogue peuvent ne pas s’afficher du tout.

Une fenêtre peut utiliser une surface basée sur OpenGL soit explicitement lors de l’appel de la fonction ` setSurfaceType()`, soit lorsqu’un élément nécessitant OpenGL est utilisé à l’intérieur de la fenêtre, ce qui fait que la fenêtre entière devient basée sur OpenGL. Par exemple, les fonctions ` QOpenGLWidget ` ou ` QQuickWidget ` peuvent déclencher ce comportement. Toutefois, si la surface est contenue dans un ` QWindow ` hébergé par ` createWindowContainer()`, ou si le `QGLWidget` (désormais obsolète) est utilisé et qu’il recouvre l’intégralité de la fenêtre en plein écran, ce problème ne se produit pas.

Pour résoudre ce problème, il est possible d’utiliser des API natives afin d’activer l’attribut ` WS_BORDER ` lors de l’affichage en mode plein écran. Cela peut être mis en œuvre comme suit :

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);
}

Cela ajoutera une bordure d'un pixel à la fenêtre en plein écran, permettant ainsi aux autres fenêtres de niveau supérieur d'apparaître par-dessus.

Initialisation OLE

Qt utilise OLE sous Windows pour prendre en charge des fonctionnalités telles que le glisser-déposer ou l’accès au presse-papiers. Pour utiliser OLE, Qt doit appeler OleInitialize. Cela définit alors le modèle de concurrence du thread sur « COINIT_APARTMENTTHREADED ».

L'appel de ` CoInitializeEx ` ou ` winrt::init_apartment ` sur le thread de l'interface utilisateur et la spécification d'un modèle de concurrence autre que « single-threaded apartment » (respectivement `COINIT_APARTMENTTHREADED ` ou ` winrt::apartment_type::single_threaded`) peuvent entraîner des bogues ou des blocages de l'application.

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