QT가 텍스트를 표시하는 데 사용하는 WinApi 기능에 관심이 있습니다 (버튼 등)QT는 텍스트를 표시하기 위해 어떤 winapi 기능을 사용합니까?
모든 입력이 지원됩니다.
편집 : 사용되는 특정 기능, 즉 이름에 관심이 있습니다. 텍스트가 설정된 QLabel이 있다고 가정 해 봅시다. 결국 텍스트를 가져 오기 위해 gdi/user32 함수가 결국 호출 될 것입니다.
QT가 텍스트를 표시하는 데 사용하는 WinApi 기능에 관심이 있습니다 (버튼 등)QT는 텍스트를 표시하기 위해 어떤 winapi 기능을 사용합니까?
모든 입력이 지원됩니다.
편집 : 사용되는 특정 기능, 즉 이름에 관심이 있습니다. 텍스트가 설정된 QLabel이 있다고 가정 해 봅시다. 결국 텍스트를 가져 오기 위해 gdi/user32 함수가 결국 호출 될 것입니다.
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 등)를 사용하거나 자체 라이브러리를 작성하는 것을 볼 수 있습니다.
항상 그렇게 된 적이 있습니까? 비록 Qt가 네이티브 위젯을 사용했지만. –
@David Heffernan : 나는 항상 그랬다고 믿는다. Qt는 OS의 theming API를 사용하여 버튼을 그려서 원래의 동등 물과 똑같이 보이도록 할 수 있습니다. 그렇지 않으면 Qt 자체에서 완전히 그려집니다. –
저는 WinApi를 10 년 이상 사용해 왔기 때문에 이것이 무엇인지 말해 줄 필요는 없습니다. 나는 랩탑을 가져 와서 소스를 다운로드 할 수 있었기 때문에 그것을 발견했다. 또한 원하는 데이터를 가로채는 방법을 발견 했으므로 문제가 해결 될 것이라고 생각합니다. :) 그래도 시간 내 주셔서 감사합니다. – RSuthke
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 응용 프로그램에 연결하는 것은 매우 어려울 것입니다.
주위에있어 지금 내 일을 :). – RSuthke
Windows 용 텍스트 단추는 텍스트를 그리는 함수를 호출하는 응용 프로그램이 아니라 Windows API에서 그려집니다. 여기에는 정말로 질문이 없습니다. –
@ David : 나는 약간의 질문을 개선했다. – RSuthke
QT는 오픈 소스입니다. 소스를 살펴보십시오. –