【问题标题】:Qt keyboard events with DirectX fullscreen带有 DirectX 全屏的 Qt 键盘事件
【发布时间】:2011-02-21 00:35:10
【问题描述】:

我需要从 Qt 应用程序中显示全屏 DirectX 窗口。

虽然 Qt 不再直接支持 directX,但这应该很容易 - 只需覆盖 QWidget,提供您自己的 paintEvent() 并设置 WA_PaintOnScreen 属性。

但是当应用程序全屏时,DirectX 会抓取所有鼠标和键盘输入 - 所以退出应用程序的唯一方法是 ctrl-alt-del。

ps。即使我编写了 DirectX 键盘处理程序,我仍然必须找到一种方法来创建正确的 Qkeypress 事件以传递给 Qt。

有人做过吗?或者有没有简单的方法告诉 DirectX 不要抢键盘?

【问题讨论】:

    标签: windows qt directx


    【解决方案1】:

    据我所知,Direct3D 没有键盘。您的问题更可能源于全屏 Direct3D 是完全不同的野兽。默认情况下,像 GDI(Qt 可能会使用它来进行渲染)这样的东西不起作用,运行时会挂钩大量信息。那么,该信息大概永远无法到达 Qt。您可以选择重新实现 Qt 以使用 Direct3D(Lighthouse 项目?)进行渲染或使用伪全屏。这通常是通过创建一个具有与屏幕相同大小的客户区的窗口然后正确定位它来完成的。

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

    【讨论】:

    • 是的,我只需要全屏部分的 D3D - 所以我只是从 Qt 中直接绘制到 D3D 表面。作为 D3D 驱动程序一部分的热键仍然有效 - 所以看起来我必须编写某种 D3D keyb 挂钩。这也意味着在 D3D 表面上绘制 Qt 菜单可能非常困难。
    【解决方案2】:

    曾尝试在 Qt 4.3-4.5 或类似的版本中获得 D3DWidget 之类的东西,但它从未得到稳定或批准,后来甚至被删除。

    也许灯塔确实是一种选择(工作量中等,基本上将 OS/DX 的东西与 Qt 的东西联系起来),或者您可以查看旧 Qt 分支中的旧 direct3D 代码。我从未使用过它,它可能不打算与最新版本的 Qt 一起使用,但总比没有好。

    【讨论】:

    • DirectX 渲染器被移除(据说)是因为他们想要跨平台并且 Qt 的未来真的在手机上。
    • @Martin:确实,我在字里行间也读到过……OpenGL 集成得很好,这是一个加分项!
    猜你喜欢
    • 1970-01-01
    • 2011-04-22
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    相关资源
    最近更新 更多