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