第一个Qt程序
开发方式
Qt 提供了两种技术来构建用户界面:
- Qt Widgets: 是一种命令式编程和设计方法,自 Qt 诞生以来就一直存在,使其成为一种稳定可靠的 UI 应用程序技术。
- Qt Quick:一种声明式编程和设计方法,使您能够通过用简单的元素来描述它们来创建流畅的 UI。
Qt Widget 适合对性能要求高、界面风格传统的桌面应用程序开发;而 Qt Quick 则更适合开发具有现代 UI 设计、需要流畅交互体验的移动应用程序和触摸屏应用程序。
我们首先来学习Qt Widgets式的开发,首先介绍一下我们需要使用到的一个工具Qt Designer
,这个工具也被打包在我们下载的PySide6中,其具体位置在虚拟环境根目录下的\Lib\site-packages\PySide6
文件夹中找到designer.exe文件。每次都这样找非常麻烦,建议复制一个其快捷方式放到桌面上。其可以通过拖拉控件的方式帮助我们快速构建前端页面。
基础空框架
Qt的主要窗口有三种类型:
- QMainWindow提供了一个包含菜单栏、工具栏、状态栏和中心部件的完整框架。
QMainWindow
适合用作应用程序的主要窗口,特别是当需要复杂的用户界面布局时。 - QWeidget是轻量级的,通常用于创建自定义控件或简单的对话框。
QWidget
不自带任何标准的窗口元素(如菜单栏、工具栏),因此非常适合构建自定义的 UI 组件或作为其他复杂窗口(如QMainWindow
或QDialog
)的一部分。 - QDialog 用于创建对话框窗口,通常是临时性的,用于与用户进行交互以获取输入或确认操作。它可以是模态的(阻止用户与主窗口交互,直到对话框关闭)或非模态的(允许用户继续与主窗口交互)。
QDialog
常见于打开文件、保存文件、设置选项等场景。
除了上述的三种基础框架之外,我们还需要了解核心组件QApplication,QApplication
是 Qt 库中用于管理应用程序的控制流和主要设置的类。它是每个 Qt 应用程序的核心对象,主要负责事件处理、主消息循环、应用程序的初始化和最终化等操作。一个 Qt 应用程序通常只有一个QApplication
实例。
我们最常用的就是QWidget。首先搭建一个QWidget的基础框架,后续就是往这个框架中填充内容,有关基础框架的搭建应该多练习几遍,烂熟于心。
【基础框架】
from PySide6.QtWidgets import QApplication,QWidget
class MyWindow(QWidget): # 自定义的窗口继承QWidget
def __init__(self):
super().__init__() # 继承父类的初始化方法
if __name__ == '__main__':
app = QApplication() # QApplication作为应用程序的入口点
window = MyWindow() # 实例化
window.show() # 展示
app.exec() # 退出
运行结果:
designer设计
上面是通过python代码实现的框架搭建和最基础的页面显示,接下来使用一下PySide提供的Qt Widgets Designer工具。
首先让我们来看一下这个软件的界面,刚打开的时候,它会提示让我们创建一个窗口,我们选择QWidget。
打开后的界面是这个样子的
左边是我们用到的窗口中的控件,我们可以通过拖拉的方式将其添加到中间的窗口中去
中间就是我们主要的窗口的设计区域,使用快捷键【ctrl+R】可以进行快速地预览
右边的部分主要是窗口和各个组件的属性设置,我们从左侧拖动一个文本框控件到窗口中,在右侧观察一下其属性
首先是QObeject,因为我们现在操作的是QWidget窗口,而QWidget又继承自QObeject,所以所有的QWidget组件都会有QObeject和QWidget的相关属性。
Obeject的主要属性为objectName,它是每个 Qt 对象(如窗口、按钮、标签等)的一个标识符。这个标识符是一个字符串,用于在代码中唯一地引用该对象。可以把它想象成对象的 “名字”,方便在程序的不同部分对特定对象进行操作。
QWidget中有各种各样控件定义的属性,这里介绍一些重要的属性:
-
geometry :包含了窗口部件(QWidget)的位置和大小信息。它由x、y、width和height四个值组成,x和y表示窗口部件在其父部件中的坐标位置(左上角为原点),width和height分别表示窗口部件的宽度和高度。
-
sizePolicy :决定了QWidget在布局中的尺寸行为。它是一个QSizePolicy类型的对象,包含了水平和垂直方向上的策略。例如,QSizePolicy=Fixed表示部件的大小是固定的,不会随着布局的变化而改变;QSizePolicy=Expanding表示部件会尽可能地扩展以填充可用空间。
-
windowTitle 属性:用于设置窗口部件(如果它是一个顶层窗口)的标题栏文字。例如:
-
visible 属性:决定了所选组件是否可见。当visible为true时,部件会显示在屏幕上;当visible为false时,部件不会被显示。
剩余还有关于控件大小、位置、字体等等属性,可以自己尝试一下设置不同的值来熟悉这些属性。
除了QObeject和QWidget的相关属性之外,大部分控件都会有自己特殊的属性,不同控件不同的特有属性我会在后面讲解某类控件的时候详细介绍。
现在,我们可以利用designer工具来做一个简单的登录界面,只需要使用到按钮(PushButton)、标签(Label)和文本框(Plain Text Edit)三种简单的控件,目前还不需要实现其功能。
设计完成之后记得保存,Designer设计的文件保存后缀名都为ui