2010-12-14 2 views
0

Qt 앱에서 전체 화면 DirectX 창을 표시해야합니다.DirectX 전체 화면이 포함 된 Qt 키보드 이벤트

DirectX는 더 이상 Qt에서 직접 지원하지 않지만, 충분히 간단해야합니다. QWidget을 재정의하고, 자신 만의 paintEvent()를 제공하고 WA_PaintOnScreen 속성을 설정하십시오.

하지만 앱이 전체 화면 인 경우 DirectX가 모든 마우스 및 키보드 입력을 잡아 내고 있으므로 앱 밖으로 나가는 유일한 방법은 ctrl-alt-del입니다.

ps. DirectX 키보드 핸들러를 작성한 경우에도 Qt에 전달할 정확한 Qkeypress 이벤트를 만드는 방법을 찾아야합니다.

누구에게이 작업을 수행 했습니까? 또는 DirectX에 키보드를 잡히지 말라고하는 간단한 방법이 있습니까?

답변

1

제 생각에는 Direct3D는 키보드를 얻지 못합니다. 귀하의 문제는 전체 화면의 Direct3D가 완전히 다른 짐승이라는 사실에서 비롯됩니다. GDI (Qt가 렌더링을 위해 잘 사용할 수있는)와 같은 것들은 기본적으로 작동하지 않으며, 런타임은 많은 양의 정보를 연결합니다. 그 정보는 아마 Qt에 접근 할 수 없었을 것입니다. 옵션은 Qt를 다시 구현하여 Direct3D (Lighthouse 프로젝트?)를 사용하여 렌더링하거나 의사 전체 화면을 사용하는 것입니다. 이것은 대개 화면과 동일한 크기의 클라이언트 영역이있는 창을 작성한 다음 올바르게 배치하여 수행됩니다.

후자 아마 것 간단한 해결책 ...

+0

예 전 화면 부분에 대해서만 D3D 만 필요합니다. 따라서 간단히 Qt 내에서 D3D 화면으로 직접 그립니다. D3D 드라이버의 일부인 단축키가 작동하기 때문에 D3D keyb 후크를 작성해야합니다. 그것은 또한 D3D 표면 위에 Qt 메뉴를 그리는 것이 아마도 매우 어렵다는 것을 의미합니다. –

0

이 Qt는 4.3-4.5 또는 그런 일에 일의 D3DWidget 종류를 얻을 시도는했지만, 나중에도 안정화하거나 승인 한 적이 제거되었습니다.

아마도 실제로는 등대가 옵션입니다 (중간 크기의 작업량으로, 기본적으로 OS/DX 자료를 Qt 자료로 연결합니다). 또는 오래된 Qt 분기의 이전 direct3D 코드를 살펴볼 수 있습니다. 필자는 그것을 사용한 적이 없었으며 아마도 Qt의 최신 버전에서 사용하려고 의도하지 않았지만 아무것도 사용하지 않는 것보다 낫습니다.

+0

DirectX 렌더러는 크로스 플랫폼이 필요하고 Qt의 미래가 실제로 휴대폰에 있기 때문에 (아마) 제거되었습니다. –

+0

@Martin : 실제로, 나는 그 라인들 사이에서 그것을 읽었습니다 ... OpenGL은 훌륭하게 통합되었습니다, 그것은 플러스입니다! – rubenvb