Windows용 Qt - 특정 문제
이 페이지에는 Windows용 Qt에 대한 정보가 포함되어 있습니다.
설치 위치
C:\Program Files와 같이 공백이 포함된 디렉터리에 Qt를 설치하면 qmake에 문제가 발생할 수 있습니다.
이러한 문제를 방지하려면 공백이 없는 하위 디렉터리에 Qt를 설치하십시오.
최대 경로 길이
Qt와 컴파일러 도구 모두 사용하는 Win32 API에는 260자(MAX_PATH)로 제한된 최대 파일 경로 길이가 내장되어 있습니다. 절대 또는 상대 디렉터리 구조가 너무 길면 여러 가지 형태로 문제가 발생할 수 있습니다. 따라서 파일 시스템 경로를 제한 범위 내로 유지하고, 빌드 디렉터리를 소스 디렉터리 근처에 배치하는 것이 좋습니다.
Visual Studio
구조체 및 유니온 멤버의 정렬을 수정하는 특수 플래그(예: /Zp2)를 사용할 때 이상한 문제가 발생한다면, 애플리케이션에 설정된 플래그를 사용하여 Qt도 다시 컴파일해야 합니다.
전체 화면 OpenGL 기반 창
창이 OpenGL 기반 표면을 사용하고 전체 화면 모드로 표시될 때, 애플리케이션의 일부인 다른 최상위 창에서 문제가 발생할 수 있습니다. Windows DWM의 제한으로 인해, 전체 화면 모드로 전환될 때 OpenGL 기반 창의 합성 처리가 올바르게 이루어지지 않습니다. 그 결과, 다른 최상위 창들이 표시되더라도 전체 화면 창 위에 제대로 배치되지 않습니다. 예를 들어, 메뉴가 올바르게 표시되지 않거나 대화 상자가 나타나지 않을 수 있습니다.
창은 setSurfaceType()가 호출될 때 명시적으로 OpenGL 기반 서페이스를 사용하거나, 창 내부에서 OpenGL이 필요한 요소가 사용되어 창 전체가 OpenGL 기반으로 설정될 때 OpenGL 기반 서페이스를 사용할 수 있습니다. 예를 들어, ` QOpenGLWidget ` 또는 ` QQuickWidget `이 이를 유발할 수 있습니다. 그러나 표면이 ` 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픽셀의 테두리가 생겨, 다른 최상위 창들이 그 위에 표시될 수 있게 됩니다.
OLE 초기화
Qt는 Windows에서 드래그나 클립보드 액세스 같은 기능을 지원하기 위해 OLE를 사용합니다. OLE를 사용하려면 Qt는 OleInitialize를 호출해야 합니다. 그러면 스레드의 동시성 모델이 COINIT_APARTMENTTHREADED 로 설정됩니다.
UI 스레드에서 ` CoInitializeEx ` 또는 ` winrt::init_apartment `를 호출할 때, 단일 스레드 아파트(single-threaded apartment) 이외의 동시성 모델(각각 `COINIT_APARTMENTTHREADED ` 또는 ` winrt::apartment_type::single_threaded`)을 지정하면 버그가 발생하거나 애플리케이션이 멈출 수 있습니다.
© 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.