day01
1、什么是Qt
-
图形用户界面应用程序开发框架,是底层应用编程接口进行了面向对象的封装
-
是一套基于C++语言的库,专注但不限于图形用户界面的程序开发,还可以进行系统调用、网络编程、数据库、2D\3D图形处理
2、为什么选择Qt
-
居于C++语言,使用简单、易用,有优秀的跨平台特性,支持Linux系统、Windows系统、MacOS系统、iOS系统、Android系统
二、Qt环境以及工具
-
Qt助手:Qt参考手册,Qt所有类、函数,相当于man手册
-
Qt构造器:负责对源文件、头文件、界面文件进行解析并自动生成Makefile文件
-
qmake
-
-
Qt设计师:对于应用程序开发而言,最开始、最纯粹的方式是通过C/C++代码来编写整个项目,但是这种方式费时费力,所有一般不会这样去做界面程序,而是通过画图、鼠标操作方式,自动生成对应的界面代码,所见即所得,设计完成后会得到一个xxx.ui界面文件
-
Qt界面编译器:负责把Qt界面文件翻译成C++编译器认识的C++代码
-
Qt创造器 = Qt助手+Qt构造器+Qt设计师+Qt界面编译器+文本编辑器,一个集成开发环境
三、第一个Qt程序
QApplication a(argc, argv); //创建Qt应用程序对象
Widget w; //创建窗口对象
QLabel* lab = new QLabel(&w);//创建标签对象,并放入窗口w中
lab->setText("Hello Qt");//设置文本内容
// lab->show(); //显式标签控件
w.show();
return a.exec(); //运行Qt程序
四、Qt创造器的常用快捷键
-
Ctrl+左击/F2 跳转到定义位置
-
Alt+Enter 对光标处的函数声明进行快速定义
-
Ctrl+i 快速调整代码格式
-
Ctrl+/ 注释、取消注释
-
Ctrl+f 搜索、替换
-
Ctrl+shift+r 批量修改标识符,Enter键确认
-
F4 在自定义的类声明、定义文件中切换
-
F1 查看光标处Qt类的帮助手册
-
Alt+0 显示或隐藏侧边栏
-
shift+Alt+u 小写转大写
-
Alt+u 大写转小写
五、Qt帮助手册
-
Header:需要导入的头文件
-
qmake:需要依赖的模块,在xxx.pro文件中添加
-
Inherits:父类
-
inherited by:子类
-
Properties:成员变量、父类中的成员变量
-
Public Function:公开属性的成员函数
-
Reimplemented Public Function:公开属性的虚函数
-
Protected Function:保护属性的成员函数
-
Reimplmented Protected Function:保护属性的虚函数
-
Public Slots:公开属性的槽函数
-
Protected Slots:保护属性的槽函数
-
Signals:该类能够自己发出的信号
-
Detailed Description:对该类的详细说明
六、窗口容器
通过Hello案例,每个控件例如标签控件都需要有显示容器来承载,如果不提供Qt会单独提供,因此想要一个整体的界面,就必须把需要的控件集合在同一个窗口中,这种就是Qt的窗口容器
-
QMainWindow 主窗口容器
-
通常包含标题栏、菜单栏、工具栏、主窗体组成
-
-
QDialog 对话窗口
-
会自带一些交互类的控件
-
-
QWidget 纯粹的窗口容器
-
以主窗体为主,它是QMainWindow和QDialog的父类
-
常用设置:
-
resize(w,h) 设置窗口大小
-
move(x,y) 设置窗口出现位置,以左上角为原点
如何把控件通过代码放入窗口:
-
创建窗口容器对象
-
QWidget* w = new QWidgit;
-
-
创建控件时,把该窗口对象地址传递给该控件构造函数
-
QLabel* lab = new Qlabel(w);
-
-
只需要显示窗口,窗口中所有控件默认也会显示
-
w->show();
-
七、Qt中的字符串和输出数据
QString类,具备string类的所有功能
它有一系列的to函数,可以方便地转换成其他类型数据
-
终端输出数据:
-
C/C++中的printf/scanf/cin/cout还可以继续使用
-
八、信号和槽
1、什么是Qt的信号?
-
当用户或者系统满足一定条件或触发某些动作时,导致窗口或者控件、类发生一些改变时,它们就会发射出一个对应的信号
-
信号可以预先连接一个特殊的函数,当信号被触发时,就会自动调用该函数,这样的函数就称为槽函数
-
例如QPushButton中的单击信号clicked信号
-
2、槽函数
-
与普通函数一样,也可以被手动调用,但是一般不会这样调用,而是通过连接信号后,由信号来自动触发
3、信号和槽的连接
-
信号和槽必须建立connect连接后,才会触发槽函数
QMetaObject::Connection QObject::connect(const QObject *sender,
const char *signal, const QObject *receiver, const char *method,
Qt::ConnectionType type = Qt::AutoConnection)
sender:信号发出的控件,必须时QObject的子类,例如QPushButton
signal:要连接的信号的签名
通过SIGNAL(信号名()) 把信号转换成信号签名
receiver:信号的接收者,必须是QObject的子类
method:要绑定的槽函数的签名
通过SLOT(槽函数())把槽函数转成槽函数签名
connect函数属于OBject的公开成员函数:
如果在类外调用 需要声明OBject::connect
QObject::connect(but,SIGNAL(clicked()),&w,SLOT(on_Pb_clicked()));
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效