2009-03-24 4 views
4

저는 QT를 오래 동안 사용 해왔고 Windows에서 GUI가 그려지는 방식과 관련하여 궁금해했습니다.
QPainter를 사용하여 자체적으로 모든 버튼, 편집 상자, 콤보 상자, 체크 상자, 탭 등을 페인팅합니까? 또는 어떻게 든 기본 위젯을 사용합니까?Qt GUI 내부 - 위젯 페인팅?

사용자 지정 스타일링 및 스키닝을 할 수 있다는 사실은 실제로 QPainter를 사용하여 모든 것을 그렸지만이 종류의 코드를 유지 관리 할 수 ​​있습니까? Qt 개발자가 실제로 윈도우 시스템의 전체 기능을 리버스 엔지니어링 했습니까? 다소 낭비가 아닌가?
또 다른 증거는 Qt gui에서 Spy ++를 사용하는 경우 모든 창에 "QWidget"과 같은 클래스 이름이 표시된다는 것입니다. 네이티브 위젯을 사용했다면 "BUTTON", "STATIC"등이되어서는 안됩니까?

다른 플랫폼은 어떤가요? Max OSX에서도 똑같이하고 있습니까?

:

답변

7

Windows XP 및 Vista의 경우 (디스플레이 설정이 Cl assic), QWindowsXPStyleQWindowsVistaStyle을 통한 위젯 페인팅은 실제로 낮은 수준의 테마 별 드로잉 (uxtheme.dll)을 사용하므로 예를 들어. 푸시 버튼은 기본 버튼처럼 보입니다. 이전 버전의 Windows에서 Qt는 QWindowsStyle을 통해 위젯 페인팅을 에뮬레이트합니다.

상황은 Mac OS X에서 비슷합니다. QMacStyle은 위젯의 하위 레벨 그리기를 위임하기 위해 모양 관리자를 사용합니다.

X11의 경우 일반적으로 Qt는 자체 스타일 그림을 사용하고 일부 윈도우 시스템을 에뮬레이션하는 특정 스타일을 가지고 있습니다. QMotifStyle은 실제로로드하지 않고 Motif와 모양이 비슷하며 Motif 환경에 따라 다릅니다. 그러나 그놈에서 실행할 때 선택적으로 Qt는 QGtkStyle을 통해 네이티브 Gtk + 테마를 사용할 수 있습니다.

4

QWindowsXPStyle documentation이 말을 가지고 "경고 :. 그것은 윈도우 XP의 스타일 엔진을 사용합니다 때문에이 스타일은 윈도우 XP 플랫폼에서만 사용할 수 있습니다"

Qt Wikipedia page이 말을 가지고

"네이티브 UI 렌더링 API를

의 사용은

Qt는 때때로 그 에뮬레이션 불완전했습니다 약간의 차이가 주도 의도 플랫폼의 기본 모양을 모방하는 데 사용 최근 버전의 Qt는 다른 플랫폼의 기본 API를 사용하여 Qt 컨트롤을 그리기 때문에 이러한 문제가 발생하지 않습니다. (대부분의 위젯 기능에 기본 API를 사용하는 wxWidgets를 참조하십시오.) "

1

Qt는 실제로 모든 플랫폼 위젯 API 또는 "원시"GDI/X/etc를 사용하는지 여부와 상관없이 실제로 모든 위젯을 그립니다. 네이티브 위젯 (wxWindows와 같은)을 사용했다면, 기성품 위젯을 사용하여 맨 위에 맞춤 기능을 추가하는 것 외에도 세부 사항까지도 변경할 수있는 스타일링을 사용하는 것은 거의 불가능합니다.