【问题标题】:Integrate Qt into existing VS project to replace WinAPI将 Qt 集成到现有的 VS 项目中以替换 WinAPI
【发布时间】:2020-10-07 06:06:59
【问题描述】:

我正在使用 VS2019 和 Qt 5.12.9,并且我有一个旧的 C++ 项目,目前它的 UI 元素使用 WinAPI。我想逐渐用 Qt 中实现的 UI 替换它,首先针对特定窗口,最终完全淘汰 WinAPI。为此,我有两个问题:

  1. 如何修改 VS 项目文件,以便项目执行所有必要的构建操作(.moc 文件等)?
  2. Qt 和 WinAPI UI 是否可以“并排”?换句话说,主窗口仍将使用 Windows 消息循环和窗口过程,但对于特定窗口,我将实例化 Qt 对象。

请记住,2) 中描述的设置是一个临时解决方案。我不打算永远兼顾这两者,这个项目太大了,无法立即完全替换 UI。

提前致谢!

【问题讨论】:

  • 您可能希望从一个新项目重新开始,并逐渐将现有文件移动到新项目中。如果您没有使用像 git 这样的源代码控制,我强烈建议您现在开始。
  • 我不认为我会一步完成这一切,但这可能取决于代码。您不会在 Qt 应用程序中使用 WinMain(),但我很确定您可以从 int main() 创建 winapi 窗口并且仍然拥有 QMainWidget .. 您可能想先测试一个小型测试应用程序。
  • 您不能(容易或可靠地)混合使用 Qt 和本机 Windows 消息循环。 Qt 想成为统治他们所有人的人(并且不幸地失败了)。您可以仍然创建本机窗口,但 Qt 会经常丢弃窗口消息。默默。如果您想现代化您的 UI,请考虑 WinUI。它是原生的、硬件加速的、受 Microsoft 支持的,并且处理键盘导航不比 Qt 差。
  • WinUI 使用 XAML 作为其标记。 Visual Studio 附带一个XAML Designer。信号和槽的等价物是 "events""delegates"。 WinUI 基于 Windows 运行时。因此,它获得了所有异步接口。并且允许在用 C++、C#、JavaScript 或 Rust 编写的组件之间实现无缝互操作,以防您也可以使用。
  • 忘了提重点:您可以按照自己的步调迁移到 WinUI。您不必更改应用程序中的任何内容。只需开始添加 WinUI 内容,或逐步替换现有的 UI 代码。 WinUI 2 还是有点乏味,但是 WinUI 3 刚刚发布了它的first preview

标签: c++ visual-studio qt user-interface winapi


【解决方案1】:

因此,根据 cmets 中 @IInspectable 的建议,我决定尝试使用 WinUI 而不是 Qt 升级应用程序。我在那里遇到的问题需要他们自己单独的问题,所以现在,我将在这里发表我自己的结论:

  1. 如果您想使用 Qt,最可靠的选择是启动一个全新的 VS 项目(并且可能移植一些后端代码)。将 Qt 与 WinAPI 混合使用太复杂且不可靠。
  2. 如果您想使用 WinUI,请记住您的应用程序只能在 Windows 10 上运行。如果这不是问题,但您使用的是遗留代码,您可能还需要解开许多 WinUI 正常工作所必需的旧配置(Windows 版本定义等)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    相关资源
    最近更新 更多