【发布时间】:2020-10-07 06:06:59
【问题描述】:
我正在使用 VS2019 和 Qt 5.12.9,并且我有一个旧的 C++ 项目,目前它的 UI 元素使用 WinAPI。我想逐渐用 Qt 中实现的 UI 替换它,首先针对特定窗口,最终完全淘汰 WinAPI。为此,我有两个问题:
- 如何修改 VS 项目文件,以便项目执行所有必要的构建操作(.moc 文件等)?
- 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