Auf dieser Seite

Qt für Windows – Spezifische Probleme

Diese Seite enthält Informationen zu Qt für Windows.

Installationsverzeichnis

Die Installation von Qt in einem Verzeichnis mit Leerzeichen, zum Beispiel „C:\Program “, kann zu Problemen mit qmake führen.

Installieren Sie Qt in einem Unterverzeichnis ohne Leerzeichen, um dieses Problem zu vermeiden.

Maximale Pfadlänge

Die Win32-API, die sowohl von Qt als auch von den Compiler-Tools verwendet wird, hat eine festgelegte maximale Dateipfladlänge von 260 Zeichen (MAX_PATH). Dies kann in verschiedener Form zu Problemen führen, wenn Ihre absoluten oder relativen Verzeichnisstrukturen zu umfangreich sind. Es wird daher empfohlen, die Dateisystempfade innerhalb dieser Grenzen zu halten und die Build-Verzeichnisse in der Nähe der Quellverzeichnisse anzulegen.

Visual Studio

Sollten bei der Verwendung spezieller Flags, die die Ausrichtung von Struktur- und Union-Mitgliedern verändern (wie z. B. /Zp2), seltsame Probleme auftreten, müssen Sie Qt ebenfalls mit den für die Anwendung festgelegten Flags neu kompilieren.

OpenGL-basierte Vollbild-Fenster

Wenn ein Fenster eine OpenGL-basierte Oberfläche verwendet und im Vollbildmodus angezeigt wird, können Probleme mit anderen Top-Level-Fenstern auftreten, die Teil der Anwendung sind. Aufgrund von Einschränkungen des Windows DWM wird das Compositing für OpenGL-basierte Fenster beim Wechsel in den Vollbildmodus nicht korrekt verarbeitet. Infolgedessen werden andere Top-Level-Fenster nicht über dem Vollbildfenster platziert, wenn sie sichtbar gemacht werden. Beispielsweise werden Menüs möglicherweise nicht korrekt angezeigt oder Dialoge werden gar nicht erst eingeblendet.

Ein Fenster kann eine OpenGL-basierte Oberfläche entweder explizit verwenden, wenn ` setSurfaceType()` aufgerufen wird, oder wenn innerhalb des Fensters etwas verwendet wird, das OpenGL erfordert, wodurch das gesamte Fenster OpenGL-basiert wird. Dies kann beispielsweise durch „ QOpenGLWidget “ oder „ QQuickWidget “ ausgelöst werden. Wenn die Oberfläche jedoch in einem „ QWindow “ enthalten ist, das mit „ createWindowContainer()“ gehostet wird, oder wenn das veraltete „QGLWidget“ verwendet wird und dieses das gesamte Vollbildfenster abdeckt, tritt dieses Problem nicht auf.

Um dieses Problem zu beheben, können native APIs verwendet werden, um das Attribut „ WS_BORDER “ bei der Darstellung im Vollbildmodus zu aktivieren. Dies lässt sich wie folgt umsetzen:

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

Dadurch erhält das Vollbildfenster einen 1-Pixel-Rand, sodass die anderen Fenster der obersten Ebene darüber angezeigt werden können.

OLE-Initialisierung

Qt nutzt unter Windows OLE, um Funktionen wie das Ziehen von Elementen oder den Zugriff auf die Zwischenablage zu unterstützen. Um OLE zu nutzen, muss Qt die Funktion `OleInitialize` aufrufen. Dies setzt wiederum das Parallelitätsmodell des Threads auf ` COINIT_APARTMENTTHREADED`.

Der Aufruf von ` CoInitializeEx ` oder ` winrt::init_apartment ` im UI-Thread und die Angabe eines anderen Parallelitätsmodells als „single-threaded apartment“ (jeweils `COINIT_APARTMENTTHREADED ` oder ` winrt::apartment_type::single_threaded`) kann zu Fehlern oder zum Absturz der Anwendung führen.

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