Qt 基础#
Qt 是一个用于创建原生图形用户界面的跨平台小部件工具包。Qt 也是一个非常完整的开发框架,提供用于构建应用程序的实用工具,以及用于网络、蓝牙、图表、3D 渲染、导航(如 GPS)等领域的扩展库。
Qt 基本组件#
如前所述,Spyder 的插件开发在于扩展其基于 Qt 的图形界面的功能。
要开发一个 GUI,我们将添加称为小部件的图形交互元素,并使用布局对其进行排列。然后,我们使用以函数或方法形式实现的自定义程序来互连这些小部件,从而允许从用户交互中触发行为。接下来,我们将更详细地阐述这些思想。
每种 Qt 组件类型都是一个以字母 Q
开头的类,后跟与其功能相关的名称。
Qt 的核心组件是 QApplication
类。每个 Qt 应用程序都需要此类的单个实例作为基础,所有 Qt 事件循环都由此控制。Spyder 本身就是 QApplication
的一个实例,其起点位于以下两行代码中 (spyder/spyder/app/mainwindow.py)
QMainWindow.__init__(self)
qapp = QApplication.instance()
QMainWindow
是一个预构建的小部件,它提供了许多标准窗口功能,如工具栏、菜单、状态栏、可停靠小部件等,并作为应用程序的基础。
信号与槽#
信号是小部件在发生某些事件时发出的通知。这些事件可能是不同的事情,从按下按钮,到输入框中的文本更改,再到窗口中的文本更改。许多信号是由用户操作触发的,但这并非定则。
槽是信号接收器。函数或方法可以用作槽,通过将信号连接到它们。如果信号发送数据,接收器可调用对象也将接收到它。许多 Qt 小部件也有自己的内置槽,因此相应的小部件会自动收到通知。
小部件#
在计算机科学中,小部件是“窗口小工具”的缩写。小部件是交互元素,例如按钮,或用于容纳其他小部件(如面板或选项卡)的容器。QWidget
类是 Qt 中创建界面的基本类,它接收来自窗口系统的事件,并在屏幕上渲染其表示。小部件可以提供一个容器来分组其他小部件,如果它没有嵌入到父小部件中,它就会变成一个窗口。
布局#
界面是通过将小部件嵌入到小部件中来构建的,由于它们是可视化组件,因此通过布局进行视觉组织。布局指示小部件如何填充其容器,可以是列、行、矩阵中的单元格,或者堆叠起来以便一次只显示一个。Qt 中有 4 种基本布局可用:QHBoxLayout
、QVBoxLayout
、QGridLayout
和 QStackedLayout
。
对话框#
对话框是与用户通信的 GUI 组件。对话框通常用于不适合主界面的功能。在 Qt 中,根据设计,QDialog
是一个模态(或阻塞)窗口,它会显示在主窗口前面,直到被关闭。
Qt 为最常见的用例提供了一些特殊对话框,例如文件打开/保存、字体选择、错误消息、颜色选择、打印等。
窗口#
如果应用程序需要不阻塞主窗口的附加窗口,这些窗口将作为非父 QWidget
实例生成。它们用于在长时间运行的进程中并行发生的任务,例如显示图表或文档编辑。
事件#
事件表示用户与 Qt 应用程序的每次交互。有多种事件类型,旨在处理不同类型的交互。在 Qt 中,它们由 QEvent
实例表示,这些实例包含有关触发它们的信息,并传递给负责触发进一步操作的特定处理程序。