0

我刚刚开始使用 Qt 和 cryengine,我想在 cryengine 中运行 Qt GUI 应用程序。我正在使用带有 Qt 插件的 Visual Studio 2010 进行编程。我有在同一个解决方案中编译的 cryengine 源代码和 Qt GUI 的源代码。但是,我不确定如何在代码中实际运行 Qt GUI。

谁能给我一个可以用来运行 Qt GUI 的代码示例?为了清楚起见,我的 Qt 项目包括一个 main.cpp、一个标头、另一个 .cpp 和一个 .ui 文件。我可以使用其中任何一个来运行 GUI,还是需要运行编译时生成的实际 .exe?

谢谢

4

1 回答 1

0

老实说,我不知道 Qt 是如何工作的。但是假设 Qt 能够渲染图像,您可以利用它以一种有点 hacky 的方式来完成它:

  • 在沙盒编辑器中准备一个简单的材质(一个材质层,Illum 着色器,只需漫反射贴图 - 任意)
  • 将 Qt UI 渲染到内存中的图像(本质上只是一个像素数组/流)
  • 将该“图像”传递给 CryEngine
  • 在 CryEngine 中找到您的材质,克隆它并将您的图像设置为漫反射贴图。
  • 直接渲染到屏幕上

您甚至可以使用该方法模拟 Scaleform 的 3D 功能:

  • 创建 EntityFlashTag 的副本 如果您现在想要一个 3D UI 元素,您可以:
  • 新实体的生成和实例
  • 设置 UI 材料(带有渲染的 Qt UI 的图像)并将其应用到您的实体实例
  • 缩放和调整实体位置

您应该能够在 GameDll 中完成所有与 CryEngine 相关的工作——但遗憾的是,我现在不能给您代码片段(以后可能会这样做)。这种方法还有一个很大的缺点:您必须自己实现整个 UI 交互。


否则,如果您希望 Qt UI 真正位于 CryEngine 之上并拥有“完整”的 CryEngine 源代码,则可以将 CryEngine 托管在 Qt 应用程序中。对于这种方法,您必须创建一个 Qt 小部件作为 CryEngine 的容器并强制该小部件具有本机句柄(您可能希望查看以下链接:强制 QWidget Child 拥有自己的窗口句柄)。然后在初始化引擎时使用该句柄(您可能想查看 PC 启动器代码以及 GameDll 中与游戏启动相关的代码)。


可能还有更好的方法,通过在 CryEngine 中真正“托管”Qt,但我不知道如何做到这一点。

于 2013-11-15T18:58:28.743 回答