2010-12-14 79 views
0

我需要从Qt应用程序中显示全屏DirectX窗口。使用DirectX全屏Qt键盘事件

尽管Qt不再直接支持directX,但应该很容易 - 只需重写QWidget,提供自己的paintEvent()并设置WA_PaintOnScreen属性。

但是,当应用程序是全屏幕DirectX抓住所有的鼠标和键盘输入 - 所以出应用程序的唯一出路是ctrl-alt-del。

ps。即使我编写DirectX键盘处理程序,我仍然需要找到创建正确的Qkeypress事件传递给Qt的方法。

有没有人这样做?或者有没有一种简单的方法可以让DirectX不要抓住键盘?

回答

1

据我所知Direct3D没有得到键盘。您的问题更可能是由于全屏Direct3D是完全不同的野兽。像GDI(Qt很可能用于渲染)在默认情况下不起作用,运行时钩住大量信息。那么这个信息大概从来没有设法去Qt。你有的选择是重新实现Qt渲染使用Direct3D(灯塔项目?)或使用伪全屏。这通常是通过创建一个窗口来实现的,该窗口具有与屏幕大小相同的客户区,然后正确定位。

后者将可能是最简单的解决方案......

+0

是的我只需要D3D的全屏幕部分 - 所以我只需从Qt内部直接绘制到D3D表面。作为D3D驱动程序一部分的热键仍然有效 - 所以看起来我必须编写某种D3D keyb钩子。这也意味着在D3D表面上绘制Qt菜单可能非常困难。 – 2010-12-15 17:18:42

0

有企图获得D3DWidget这种事情在Qt的4.3-4.5或类似的东西,但它从来没有被稳定或批准,后来连除去。

也许确实灯塔是一个选项(中等工作量,基本上将OS/DX的东西链接到Qt的东西),或者你可以看看旧的Qt分支旧的direct3D代码。我从来没有使用它,它可能不打算用于最新版本的Qt,但它总比没有好。

+0

DirectX渲染器被删除(据推测),因为他们想要跨平台和Qt的未来真的在手机上。 – 2010-12-15 17:16:44

+0

@Martin:的确,我读过这些行之间的内容...... OpenGL很好地集成在一起,这是一个很好的例子! – rubenvb 2010-12-15 20:33:04