2011-04-23 3 views
1

QT가 텍스트를 표시하는 데 사용하는 WinApi 기능에 관심이 있습니다 (버튼 등)QT는 텍스트를 표시하기 위해 어떤 winapi 기능을 사용합니까?

모든 입력이 지원됩니다.

편집 : 사용되는 특정 기능, 즉 이름에 관심이 있습니다. 텍스트가 설정된 QLabel이 있다고 가정 해 봅시다. 결국 텍스트를 가져 오기 위해 gdi/user32 함수가 결국 호출 될 것입니다.

+1

Windows 용 텍스트 단추는 텍스트를 그리는 함수를 호출하는 응용 프로그램이 아니라 Windows API에서 그려집니다. 여기에는 정말로 질문이 없습니다. –

+0

@ David : 나는 약간의 질문을 개선했다. – RSuthke

+1

QT는 오픈 소스입니다. 소스를 살펴보십시오. –

답변

3

Spy ++에서 하위 창이 표시되지 않는 이유는 실제로보고있는 창은 하나의 큰 창이고 Qt는 버튼을 그립니다 때문입니다. 따라서 볼 수있는 버튼에는 자신의 HWND이 없습니다. Qt는 또한 일종의 이벤트 시스템을 구현하여 "버튼"을 "클릭"할 때 어떤 일을합니다. 그것들은 "lightweight"컨트롤 또는 "windowless" controls이라고 부릅니다.

인터넷 익스플로러와 파이어 폭스가 작동하는 것과 같은 방식입니다. 웹 페이지에 표시되는 버튼은 렌더링 엔진에 의해 그려지고 브라우저는 버튼 클릭을 시뮬레이션합니다.

Qt가 어떻게 작동하는지 보는 것은 실제로 Windows API가 어떻게 작동 하는지를 배우는 꽤 나쁜 방법입니다. Windows API와 인터페이스하는 코드는 소스에 깊이 파묻혀 있습니다. Qt는 플랫폼 간 프레임 워크이므로 공용 인터페이스에서 Windows API를 노출 할 수 없습니다.

Windows API부터 시작하려면 you can start with this tutorial. 단계별로 C++ 및 Windows API 만 사용하여 창, 단추 등을 만드는 방법을 보여줍니다.

Windows API는 GUI 툴킷이 아니라는 점에 유의하십시오 (모든 사람들이 생각한다고해도). 운영 체제 자체에 대한 저수준 응용 프로그램 인터페이스로서 응용 프로그램을 구현하는 데 필요한 기본 요소 (예 : 파일, 창, 스레드, 네트워킹 등)를 제공합니다. 그래서 많은 사람들이 프레임 워크 나 라이브러리 (예 : Qt, FLTK, WxWidgets 등)를 사용하거나 자체 라이브러리를 작성하는 것을 볼 수 있습니다.

+0

항상 그렇게 된 적이 있습니까? 비록 Qt가 네이티브 위젯을 사용했지만. –

+0

@David Heffernan : 나는 항상 그랬다고 믿는다. Qt는 OS의 theming API를 사용하여 버튼을 그려서 원래의 동등 물과 똑같이 보이도록 할 수 있습니다. 그렇지 않으면 Qt 자체에서 완전히 그려집니다. –

+1

저는 WinApi를 10 년 이상 사용해 왔기 때문에 이것이 무엇인지 말해 줄 필요는 없습니다. 나는 랩탑을 가져 와서 소스를 다운로드 할 수 있었기 때문에 그것을 발견했다. 또한 원하는 데이터를 가로채는 방법을 발견 했으므로 문제가 해결 될 것이라고 생각합니다. :) 그래도 시간 내 주셔서 감사합니다. – RSuthke

0

Qt는 최상위 윈도우 또는 실제 Windows (예 : Qt::Window 또는 플래그가 설정된 경우)를 생성하는 경우에만 CreateWindowEx을 사용합니다.

나머지는 에뮬레이트됩니다. Qt는 Windows의 UxTheme에서 비트 맵을 가져 와서 이벤트, 메시지, 이벤트 루프, 렌더링과 같은 모든 작업에 대해 자체 루틴을 사용합니다.

당신이 보는 이러한 마법 - 3d Effects가 적용된 기본 창 ... 실제로는 기본이 아니며 기본 언어 만 볼 수 있습니다. UxTheme의 비트 맵은 OpenGL 텍스처 (또는 Direct3D 텍스처)로 변환되어 GPU로 렌더링됩니다.

언젠가 Qt CALLS TextOut이 등장하는 것으로 보입니다. 예를 들어, 자신의 글꼴 렌더링은 QGLWidgets에서 또는 GraphicsEffect가 설정된 경우에 발생합니다.

답변 : 소스를 확인하십시오. QT가 모든 것을 렌더링하는 방식은 흥미롭지 만 GDI TextOut과 같은 API 함수에 의존하지 않습니다.

Windows 방식으로 Qt 응용 프로그램에 연결하는 것은 매우 어려울 것입니다.

+0

주위에있어 지금 내 일을 :). – RSuthke

관련 문제