Qt для Windows — специфические проблемы
Эта страница содержит информацию о Qt для Windows.
Именование библиотек
Параметр configure -qtlibinfix не может принимать номер версии в качестве аргумента. Например: -qtlibinfix 5.6.0 следует указывать как -qtlibinfix QtCore5.6.dll.
Место установки
Установка Qt в директорию с пробелами, например, C:\Program Files, может вызывать ошибки компоновщика, подобные следующим:
c:\program.obj not found
Установите Qt в поддиректорию без пробелов, чтобы избежать этой проблемы.
Возможный конфликт GL
Известна проблема при запуске Microsoft NetMeeting, Lotus SameTime и других приложений, требующих захвата экрана, когда включено прямое рендеринг. Другие GL-приложения могут работать некорректно, если прямое рендеринг отключено.
Visual Studio
Компоновщик Visual C++ не понимает имена файлов с пробелами (например, C:\Program files\Qt\), поэтому вам придется переместить его в другое место или явно указать путь самостоятельно.
QTDIR=C:\Progra~1\Qt
Если у вас возникают странные проблемы при использовании специальных флагов, которые изменяют выравнивание членов структур и объединений (таких как /Zp2), вам потребуется перекомпилировать Qt с установленными флагами для приложения.
Полноэкранные окна на основе OpenGL
Когда окно использует поверхность на основе OpenGL и отображается в полноэкранном режиме, могут возникать проблемы с другими окнами верхнего уровня, которые являются частью приложения. Из-за ограничений Windows DWM композиция обрабатывается некорректно для окон на основе OpenGL при переходе в полноэкранный режим. В результате другие окна верхнего уровня не размещаются поверх полноэкранного окна, когда они становятся видимыми. Например, меню могут отображаться некорректно, или диалоговые окна не отображаются.
Окно может использовать поверхность на основе OpenGL либо явно, когда вызывается setSurfaceType(), либо когда внутри окна используется что-то, требующее OpenGL, что приводит к тому, что все окно становится основанным на OpenGL. Например, QOpenGLWidget или QQuickWidget могут вызвать это. Однако, если поверхность содержится в QWindow, который размещен с помощью createWindowContainer(), или используется устаревший QGLWidget, и он покрывает все полноэкранное окно, то этой проблемы не возникает.
Чтобы решить эту проблему, можно использовать QWindowsWindowFunction для включения собственного флага Windows, который установит WS_BORDER при отображении в полноэкранном режиме. Это можно использовать следующим образом:
QWindowsWindowFunctions::setHasBorderInFullScreen(tlwWindow->windowHandle(), true);
Это придаст полноэкранному окну 1-пиксельную границу, что позволит другим окнам верхнего уровня отображаться сверху.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.12/windows-issues.html