以下模块均引用官方文档内容,并进行简要的中文说明,同时我会通过实例介绍如何用PyQt5 对Qt各类模块进行使用。
为了更方便搞懂个模块调用和集成关系,我利用模块继承关系树来分类各模块组别,其重要内容为官方文档,在深入了解各模块功能时作为参考,也作为重点了解内容。
QtCore是Qt中被其他类所使用的核心非图形类,所有Qt模块均依赖该模块,QtCore是最为常用的模块。
模块导入:
import QtCore
Qt提供跨平台线程类、传递事件安全线程和跨线程信号/槽连接。多线程编程也是非常有用的规范,来防止执行耗时运算导致的应用用户界面冻结。
GUI组件的基础类,包括OpenGL。QtGui提供视窗化系统整合、事件处理、OpenGL和OpenGL ES集成、2D图形、基础成像、字体和文本。这些类在Qt的用户界面技术内部使用,并且也可以直接使用,例如用低级OpenGL ES图形API写应用。
模块导入:
import QtGui
Qt为应用开发者写用户界面提供更高级别API,Qt Quick比Qt GUI模块更加适用。
QGuiApplication和QWindow是QtGui中最重要的两个类,一个Qt应用如果想将内容显示到屏幕上离不开到他们。QGuiApplication包含的主事件循环,负责处理视窗系统和其他源的所有事件的处理和调度,也负责处理应用的初始化和终止。
QWindow类作用于底层视窗化系统中的窗口,它提供很多虚函数来处理视窗化系统的事件(QEvent),像触摸输入、曝光、焦点、键盘敲击和几何变化等。
QtGui模块包含2D图形、图片、字体和高级排版。QWindow在创建QSurface::RasterSurface类型外观时,可以组合使用QBackingStore、QPainter(Qt高度优化的2D矢量图形API)。QPainter支持画线、多边形、矢量路径、图片和文本。
Qt可以使用QImage和QPixmap类来加载和保存图片,Qt默认支持很多常见图片格式,包括JPEG和PNG等,用户可以通过QImageIOPlugin类增加额外的格式。
Qt排版用QTextDocument类,它联合使用了QPainter API和QtFont类。应用偏好更低层级的API来处理字体和文本,像QRawFont和QGlyphRun类。
根据不同平台支持情况,QWindow提供OpenGL和OpenGL ES渲染。OpenGL渲染的开启,通过将QWindow的外观类型设置为QSurface::OpenGLSurface,用QSurfaceFormat选择格式,然后创建QOpenGLContext来管理原生OpenGL上下文。此外,QOpenGLPaintDevice类,能使用OpenGL加速QPainter渲染,简化OpenGL代码编写,降低扩展操作复杂度。QOpenGLFunctions使应用可以在桌面级OpenGL中使用所有OpenGL ES 2函数,且不用手动解析OpenGL函数指针。因此允许跨平台应用开发——移动或嵌入式设备,并且在Qt API的一些类中封装了原生OpenGL功能:
QtGui模块也包含一些数学类,来援助大部分与3D图形有关的常用数学运算,这些类有QMatrix4x4、QVector4D和QQuaternion。用QSurface::OpenGLSurface类型创建的QWindow可以联合使用QPainter和QOpenGLPaintDevice,通过牺牲一些视觉质量,来获得OpenGL硬件加速2D图形。
扩展Qt GUI的窗口部件类,Qt Widgets模块提供一套UI元素来创建经典桌面式用户界面。在Qt中窗口部件是创建用户界面的主要元素,Widgets可以显示数据和状态信息,接收用户输入,并且为其他应该组合在一起的窗口部件提供容器(container)。
模块导入:
import QtWidgets
QWidget类提供基础的性能,如渲染到屏幕,处理用户输入事件。Qt提供的所有UI元素是QWidget子类,或是被用于连接QWidget子类。即:
QtWidgets.QWidget
创建自定义窗口部件可以通过QWidget子类化或适合的子类实现,并重载虚拟事件程序。子类化例如:
import QtWidgets
class InputDialog(QtWidgets.QWidget):
def __init__(self):
super(InputDialog, self).__init__()
风格绘制代表窗口部件和封装GUI外观,Qt的内建窗口部件使用QStyle类来执行几乎所有这类绘制。除了已经子类化QStyle之外,Qt样式表在自定义窗口部件外观方面有非常强大的机制。
Layouts是自动化排列容器内子部件的一个简单灵活的途径,每个窗口部件通过sizeHint 和sizePolicy属性给layout报告它的尺寸需求,然后layout相应的分布可用空间。
Model/View类管理展现给用户数据的方式,构建表/表格的数据驱动型应用使用models、views和delegates来分离数据。
图形视图框架用来管理和交互大量自定2D图形项、视觉化视图组件项,支持缩放和旋转。