Qt für Windows - Spezifische Probleme
Diese Seite enthält Informationen über Qt für Windows.
Installationsort
Die Installation von Qt in ein Verzeichnis mit Leerzeichen, zum Beispiel C:\Programme, kann zu Problemen mit qmake führen.
Installieren Sie Qt in ein Unterverzeichnis ohne Leerzeichen, um dieses Problem zu vermeiden.
Maximale Pfadlänge
Die Win32-API, die sowohl Qt als auch Compiler-Tools verwenden, hat eine eingebaute maximale Dateipfadlänge von 260 Zeichen (MAX_PATH
). Dies kann sich auf verschiedene Weise bemerkbar machen, wenn entweder Ihre absoluten oder relativen Verzeichnisstrukturen zu umfangreich sind. Es wird daher empfohlen, die Dateisystempfade in Grenzen zu halten und die Build-Verzeichnisse in die Nähe der Quellverzeichnisse zu legen.
Visuelles Studio
Wenn Sie seltsame Probleme mit der Verwendung spezieller Flags haben, die die Ausrichtung von Struktur- und Unionsmitgliedern ändern (wie /Zp2
), müssen Sie Qt mit den für die Anwendung gesetzten Flags neu kompilieren.
Bildschirmfüllende OpenGL-basierte Fenster
Wenn ein Fenster eine OpenGL-basierte Oberfläche verwendet und im Vollbildmodus angezeigt wird, können Probleme mit anderen Fenstern der obersten Ebene auftreten, die Teil der Anwendung sind. Aufgrund von Einschränkungen der Windows-DWM wird das Compositing für OpenGL-basierte Fenster nicht korrekt gehandhabt, wenn der Vollbildmodus aktiviert wird. Infolgedessen werden andere Fenster der obersten Ebene nicht über dem Vollbildfenster platziert, wenn sie sichtbar gemacht werden. Zum Beispiel können Menüs nicht korrekt angezeigt werden, oder Dialoge werden nicht angezeigt.
Ein Fenster kann eine OpenGL-basierte Oberfläche verwenden, entweder explizit, wenn setSurfaceType() aufgerufen wird, oder wenn etwas, das OpenGL benötigt, innerhalb des Fensters verwendet wird, was dazu führt, dass das gesamte Fenster OpenGL-basiert ist. Zum Beispiel können QOpenGLWidget oder QQuickWidget dies auslösen. Wenn die Oberfläche jedoch in einem QWindow enthalten ist, das mit createWindowContainer() gehostet wird, oder wenn das veraltete QGLWidget verwendet wird und es das gesamte Vollbildfenster abdeckt, tritt dieses Problem nicht auf.
Um dieses Problem zu lösen, können native APIs verwendet werden, um das WS_BORDER
Attribut zu aktivieren, wenn es im Vollbildmodus angezeigt wird. Dies kann wie folgt genutzt werden:
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-Rahmen, so dass die anderen Fenster der obersten Ebene oben erscheinen können.
© 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.