在core模块之上,就是最为重要的GUI模块了。Qt4中只有QtGui模块,UI相关的功能都封装在一起。Qt5中拆分为GUI、Widget两个模块。GUI模块提供桌面系统集成,事件处理,OpenGL/Vulkan,基础图像,字体等功能。通过链接1 可知,GUI模块的class 是相当少的。但是,它们却是Qt 界面技术的核心。我们甚至可以不使用Qt Widget 模块,也能做出来符合设计的UI功能。其中,QSurface,QWindow,QPainter是基础,其他设计都围绕着它们而来。
要注意,QWindow 只是Qt5 之后引进的。Qt4中,UI相关的功能,都封装在Qt GUI模块。Qt4的设计我们也就不讨论了,只看看Qt5。
UI绘制,就是二维渲染。Qt支持多种渲染方式。这就像做三维显示,OpenGL、Vulkan、Metal这三种渲染接口都能实现。Qt的二维渲染,支持如下接口:
QSurface::RasterSurface
QSurface::OpenGLSurface
QSurface::RasterGLSurface
QSurface::OpenVGSurface
QSurface::VulkanSurface
QSurface::MetalSurface
虽然支持矢量绘制硬件加速,但是我并没有见到真的实现。即使是GDI+、Direct2D,似乎都没有硬件厂商去支持,都是software implementation。更何况Qt需要考虑跨平台,我更不认为这些选项中,Qt真的支持纯2D矢量渲染硬件加速。官方有如下声明:
A QWindow created with the QSurface: