我有一个用 C++/MFC 编写的向导应用程序,我想改进 UI。不同的按钮,更改对话框背景颜色等。我可以使用 QT 来改善外观还是应该更改为 WPF 和 C#?
1 回答
Qt 5 基本上为您提供了五 (5!) 个 UI 工具包:
Gui模块类似于您在 1980 年代末/1990 年代初获得的非常好的 2D 图形库。您可以访问窗口的缓冲区和键/鼠标事件。其他一切都取决于你。这将是从“当时”移植现有应用程序的最快方式。图形原语很简洁,有字体、画家路径、渐变等,但没有小部件的概念,只有顶层窗口。您可以在该窗口内的任何位置绘制所有内容。
提供的概念比典型的平台工具包(如 winapi 或 xlib)具有更高的抽象级别。就图形原语而言,它在精神上更类似于 Cairo 或 PDF。
可以以与
QRasterWindow
为 完成相同的方式化 aQWidget
。小部件模块为您提供 Qt4 风格的小部件和布局,以及可定制的样式。这可能是最像 MFC 的模型,尽管它有更多的功能。这些小部件是所谓的外星小部件——这意味着它们没有本地窗口句柄。这使事情保持快速。您有大量预先编写的小部件来执行各种用户输入/输出。可以并行化小部件的绘制。.
声明性模块,又名 Qt Quick 1,使用
QGraphicsView
小部件模块中的小部件来显示图形场景。这个场景是使用 QML 描述的。控件相当简陋,没有特定于平台的样式。无论您在哪里运行,它看起来都一样。对界面中的动画/流畅性有很好的支持。Quick模块,又名 Qt Quick 2,使用新的基于 OpenGL ES 的场景图,并且可以在来自小部件模块的小部件或来自 gui 模块的原始窗口之上运行。使用 QML 描述场景。有一个桌面组件集,可为您提供平台样式的控件,如组合框、文本输入、表格等。新的场景图可以真正利用硬件,并且当您拥有繁重的动画 UI 时,其性能将优于小部件和 Qt Quick 1。这是走向未来的道路。Qt 5.2 引入了全新的 Javascript 引擎和新的场景图渲染器,具有更好的性能。Qt 5.11 再次引入了新的 Javascript 引擎,速度提高了一倍。
通过 C++ 和 QML API 公开的3D模块是一个高级 3D 对象和场景渲染系统,专为交互式应用程序量身定制。它使用户与 3D 对象的交互变得容易。C++ 和 QML API 是对等的,可以根据您的偏好使用 - 这与 Qt Quick 形成对比,Qt Quick 中只有 QML API 提供完整功能。
Qt Quick 1 和 Qt Quick 2 都可以以非常适中的性能成本包装现有的小部件,但是您确实会失去“本机”QML 对象的一些优点。
请注意,对 OpenGL 实现的需求与在您的系统上提供的实现是有区别的。在 Windows-XP 后的系统(Vista、7、8 等)上,您通常应该使用 Qt 5 及其在 DirectX 之上运行的 OpenGL ES 2 的 ANGLE 实现。只有在 Windows XP 上,您才被迫使用系统 OpenGL 驱动程序。
Qt 是一个非常好的框架,即使对于非 gui 应用程序也可以使用。它具有良好的网络和文件 I/O、时间/日期的跨平台抽象,并提供了许多其他通用的好东西。例如,与 ncurses 一起使用它相对容易。
移植现有 MFC 代码的最快方法是继续使用 C++ 并将 Qt 与qtwinmigrate 解决方案一起使用。后者是一个 BSD 许可的 shim 层,可以让您快速启动和运行。