【Qt】边学边写之Qt教程(零基础)
文章目录
- 1、创建Qt项目
- 1.1 使用向导创建
- 1.2 一个最简单的Qt应用程序
- 1.2.1 main函数中
- 1.2.2 类头文件
- 1.2.3 pro文件
- 1.2.3 命名规范
- 1.2.4 QtCreator常用快捷键
- 2、Qt 按键小程序
- 2.1 按钮的创建和父子关系
- 2.2 Qt窗口坐标体系
- 2.3 Qt常用API函数
- 2.4 对象树模型
- 3、信号和槽机制
- 3.1 系统自带的信号和槽
- 3.2 自定义信号和槽
- 3.2.1 自定义信号使用条件
- 3.2.2 自定义槽函数使用条件
- 3.2.3 使用自定义信号和槽
- 3.3 信号和槽的拓展
- 3.4 Qt4版本的信号槽写法
- 3.5 QDebug
- 3.5 Lambda表达式
- 3.5.1 局部变量引入方式
- 3.5.2 函数参数
- 3.5.3 选项Opt
- 3.5.4 槽函数使用Lambda表达式
- 3.5.5 函数返回值 ->retType
- 4、复习
1、创建Qt项目
1.1 使用向导创建
打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项
(图片来源网络,侵删)弹出New Project对话框,选择Qt Widgets Application,
选择【Choose】按钮,弹出如下对话框
设置项目名称和路径,按照向导进行下一步,
选择编译套件
向导会默认添加一个继承自QMainWindow的类,可以在此修改类的名字和基类。默认的基类有QMainWindow、QWidget以及QDialog三个,我们可以选择QWidget(类似于空窗口),QWidget 是所有能看到的窗口或者控件的父类,QMainWindow、QDialog 都继承自它
(图片来源网络,侵删)这里我们可以先创建一个不带UI的界面,继续下一步
系统会默认给我们添加main.cpp、mywidget.cpp、 mywidget.h和一个.pro项目文件,点击完成,即可创建出一个Qt桌面程序。
1.2 一个最简单的Qt应用程序
1.2.1 main函数中
#include "widget.h" #include int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }
main函数
QApplication 就是Qt里边每个应用程序有且仅有一个的应用程序对象
QApplication::exec() 程序的生命循环、消息循环 ,当作以下形式
解释:
(图片来源网络,侵删)- Qt系统提供的类头文件没有.h后缀
- Qt一个类对应一个头文件,类名和头文件名一致
- QApplication应用程序类
- 管理图形用户界面应用程序的控制流和主要设置。
- 是Qt生命,一个程序要确保一直运行,就肯定至少得有一个循环,这就是Qt主消息循环,在其中完成来自窗口系统和其它资源的所有事件消息处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理。
- 对于任何一个使用Qt的图形用户界面应用程序,都正好存在一个QApplication 对象,不论这个应用程序在同一时刻有多少个窗口。
a.exec()
程序进入消息循环,等待对用户输入进行响应。这里main()把控制权转交给Qt,Qt完成事件处理工作,当应用程序退出的时候exec()的值就会返回。在exec()中,Qt接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。
std::cout treat(int) ok
3.4 Qt4版本的信号槽写法
connect使用不一样,信号和槽函数声明差不多 connect(信号发送者,SIGNAL(函数原型) ,信号接收者,SLOT(函数原型))
//Qt4 的 信号和槽 ,实现teacher和student带参数的信号和槽连接 connect(pTeacher,SIGNAL(hungry(QString)),pStudent,SLOT(treat(QString)));
这里使用了SIGNAL和SLOT这两个宏,宏的参数是信号函数和槽函数的函数原型。
因为直接填入了函数原型,所有这里边编译不会出现因为重载导致的函数指针二义性的问题。但问题是如果函数原型填错了,或者不符合信号槽传参个数类型约定,编译期间也不会报错,只有运行期间才会看到错误log输出。
原因就是这两个宏将后边参数(函数原型)转化成了字符串。目前编译器还没有那么智能去判断字符串里边的内容符不符合运行条件。
SIGNAL和SLOT宏的原理,就是将后边的参数转成字符串 类似 #define toStr(arg) #arg -> “arg”
推荐:以后都用qt5的
3.5 QDebug
qdeubg输出QString默认会转义
//解决方法两个 //1 将QString转成 char * //qDebug()
还没有评论,来说两句吧...