一、Qt简介
1、什么是Qt
是设计图形用户应用程序框架,是对底层应用编程接口进行了面向对象的封装
是一套基于C++语言的库、专注但不限于图行用户界面的开发,也可以进行系统调用、网络编程、数据库、2D/3D图形处理
2、为什么选择Qt
基于C++语言、使用简单、易用、有优秀的跨平台特性、支持Linux、Windows、MacOS、iOS、Android
二、Qt环境与工具
Qt助手: Qt参考文档,里面简介了Qt中所有的类和函数,相当于Qt的man手册,是每个Qt开发人员必备工具
Qt构造器: 负责对源文件、头文件、界面文件(.ui)进行解析生成Makefile编译脚本
qmake -project 根据当前目录中文件,生成项目的配置文件 xxx.pro 结尾
qmake 根据 xxx.pro项目文件的内容,自动生成Makefile
Qt设计师: 对于界面应用设计开发来说,最存粹的方式是通过C/C++代码来编写整个项目,包括界面设计
但是这种方式费时、费力,所以一般不会这样做界面,而是采用画图、鼠标拖拽等方式设计界面
并且会自动生成界面文件,所见即所得,完成后会得到一个xxx.ui文件
Qt界面编译器: 负责把Qt中的界面文件(.ui)翻译成C++代码(.h)
uic xxx.ui -o xxx.h
Qt创造器=Qt助手+Qt构造器+Qt设计师+Qt界面编译器+文本编辑器 是一个集成开发环境
三、Qt的第一个程序
1、新建项目
打开Qt Creator ->文件->新建文件或项目->Appliction->Qt Widgets Application->输入项目名称
->选择项目路径->选择编译器(默认即可)->输入默认的类名、界面文件名->完成
2、编写代码
QApplication a(argc, argv); // 创建Qt应用程序对象
QLabel* lab = new QLabel; // 创建一个标签对象
lab->setText("Hello Qt"); // 设置标签文本内容
lab->show(); // 显示标签
return a.exec(); // 开始运行Qt程序
3、编译运行
1、点击右下角绿色按钮
2、Ctrl+R
四、Qt创造器常用的快捷键
Alt+0 显示或隐藏侧边栏
Ctrl+i 格式化代码
Ctrl+/ 注释或取消注释
Ctrl+F 查找、替换
Ctrl+shift+r 批量修改变量名,enter键确认
Ctrl+左单击 / F2 跳转到变量、函数等内容的定义位置
shift+F2 声明与定义之间切换
F1 光标定在类对象上,打开该类的帮助手册
F4 切换头文件和源文件
shift+Alt+U 小写切换成大写
Alt+U 大写切换成小写
Ctrl+A Ctrl+C Ctrl+V Ctrl+S Ctrl+Z
五、Qt帮助手册
Header: 需要包含的头文件
qmake: 需要依赖的模块 需要在xxx.pro 文件中添加
Inherits: 父类
Properties: 成员变量
类自己本身的成员变量和继承父类的成员变量
Public Functions: 公开属性的成员函数
Reimplemented Public Functions: 公开属性的虚函数
Public Slots: 具有公开属性的槽函数
Signals: 该类可以发出信号
Reimplemented Protected Functions: 具有保护属性的虚函数
Additional Inherited Members: 继承过来的成员汇总
Detailed Description对该类的详细说明和举例
六、窗口容器控件
从Hello例子中看出,每个控件都可以是一个单独的窗口,但是要想实现一个完善的界面,所有控件都应该集合在一个窗口中
因此需要一个窗口容器盛放这些控件
1、QMainWindows 主窗口容器
通常包含了标题栏、菜单栏、工具栏、状态栏、主窗体区组成
2、QDialog 对话窗口容器
自带一些交互的控件
3、QWidget 纯粹的窗口容器
它是QMainWindow QDialog类的父类
常用设置:
move(x,y) 设置窗口的位置(以屏幕左上角为原点)
resize(w,h) 设置窗口的宽 高
如何把控件放入窗口容器中:
1、创建窗口容器对象
QWidget* widget = new QWidget;
2、创建控件时,把窗口的对象指针传参给控件对象
QLabel* lab3 = new QLabel(widget);
3、只需要窗口容器显示,则里面的所有控件默认都显示
widget->show();
七、Qt中的字符串和终端输出数据
QString 具备String类的所有功能
通过to系列函数可以转换为各种数据类型的数据
例如: QString str = "3.14"; str.toDouble();
终端输出:
C/C++的printf/scanf/cin/cout 都可以继续使用
八、信号和槽
1、什么是信号
当用户或系统触发某个动作时,可能导致窗口、控件发生变化时,该窗口或控件会发射一个信号
信号可以预先连接上一个函数,当信号触发时就会自动调用该函数
2、槽
也叫槽函数,与普通函数一样,可以被手动调用
3、信号与槽函数进行连接
connect(const QObject * sender, const char * signal, const QObject * receiver, const char * method)
sender: 信号的发送者,必须是QObject类的子类
signal: 信号签名
SINGAL(信号函数) 把信号转换成信号签名
receiver: 信号的接收者,必须是QObject类的子类
method: 槽函数签名
SLOT(槽函数) 把槽函数转换成槽函数签名
4、自定义信号和槽
a、向项目中新建一个类,一定要继承QObject
1、右击项目名->添加新文件->C++ class->类目和继承QObject->完成
2、在该类signals: 定义一个信号函数:
3、在public slots: 后面声明该类的槽函数,在源文件中实现(写完声明后,
Alt+enter 快速地在对应的.cpp中生成函数定义)
4、通过connect进行信号和槽函数的绑定
类自己向自己发生信号
类向别的控件类发送信号
别的控件类向类自己发生信号
5、发送信号: 调用信号函数
通过emit命令发送信号
调用信号函数
注意: 一定要继承QObject,并且要在类声明中写Q_OBJECT
九、Qt创造器中是如何使用widget.ui/mainwindows.ui等文件
1、widget.ui文件会被uic编译成ui_widget.ui文件,在项目目录看不到,在编译结果目录才有(不想让用户看到、修改)
2、在ui_widget.h中会自动生成一个类 Ui_Widget, 该类会自动定义widget.ui中设计的所有控件对象
3、在Ui_Widget类中有一个成员函数setupUi, 该函数的参数是窗口容器的指针,该函数会实例化所有的控件对象
并设置相应的属性、大小、位置等内容
4、ui_widget.h中定义了Ui名字空间,该名字空间中定义了一个空的类Widget,该类继承了Ui_Widget类
5、Qt创造器会自动生成widget.h和widget.cpp文件
6、在widget.h声明了Ui名字空间和Widget类,并且自动生成了WIdget类型,该类型继承了QWidget,并且在类中定义了
Ui_Widget *ui成员
7、在widget.cpp中自动生成构造函数和析构函数
在构造函数中实例化了ui对象,并且在函数中调用了ui->setupUi(this) 相当于对自己窗口进行所有控件的设置
8、在main.cpp中实例化Widget类,在构造函数中九已经对该Widget窗口对象进行设置了
最后通过 窗口对象.show() 显示窗口中的所有控件