目录
❤ 2020.8.14 ❤
〇 Qt工程文件及内容
新建一个工程后,文件如图所以
○ 关于main函数的讲解
这是来自传智播客的视频,建立一个基类为Qwidget,不创建界面的工程,其主函数默认内容如图所以
关于创建qt程序的总结
○ 项目管理文件(.pro文件)
.pro文件中不要添加一些没用的东西,注释都不要
模板类型
○ 头文件
♣ 头文件开头的是防止重复加载的,在新版编译器中部分功能可以用#program once代替,但是两者有一些不同,具体可以参考:#ifndef 与 #program once 的区别
○ .cpp文件
就是源文件。
♣ 关于初始化列表,我在学习C++的时候没有印象。。。见这里吧:c++中的初始化列表详解
○ 项目界面文件
双击.ui文件会打开一个设计器,这个designer是Qt Creator里面的,和Qt自带的Qt Designer不一样。、
编译后在项目目录下会生成四个文件
具体的介绍见这里:Qt项目界面文件(.ui)及其作用(超详细)
○ 命名规范和编译器的快捷键
❤ 2020.8.21 ❤
〇 在界面中添加按钮
在Qt助手中搜索PushBotton
文档中给出了一些该类的信息,比如需要的头文件,所属模块,父类、子类等等。
○ 创建工程
创建一个没有界面的工程
得到一个工程
将如下代码敲入按钮的构造函数中,并将QPushButton头文件include到源代码文件中
♣ 如果直接用show,而不是指定父类(依赖),那么按钮会默认新建一个窗口显示。
♣ 如果用resize不用setfixedsize那么窗口大小是可以调节的
代码如下
编译运行
非常夸张
〇 对象树
对象的构造顺序是从父对象到子对象,析构顺序是从子对象到父对象
在调试过程中可以include一个<QDebug>头文件,然后在函数中加入qdebug()函数,来显示程序运行中的标记
类似于这样,就可以在构造或析构过程中显示对应字符。
对象树简单来说就是这样
〇 Qt窗口坐标系
〇 信号和槽(重点)
简单来说,信号就是一个动作,槽就是一个相应函数(我的理解),两者之间用connect函数连接。
关于一个类的信号可以在帮助文档里搜到,如果没有那就搜他的父类,比如QPushButton的父类QAbstractButton的信号
槽也是同理
○ 用一个点击按钮关闭窗口的例子说明
首先我建立一个里面有一个按钮的工程
长这样
然后如图所示加入connect语句
这样
♣ 新版本的c++中,函数名就是函数的地址,所以可以不加前面的&,但是在早期的C++中必须加&,所以为了直观还是加上比较好
OK 试验成功
○ 自定义信号和槽
首先新建一个工程(空窗口widget类),新建完成之后先运行一下看看能不能运行(一开始我也觉得没必要,可是。。。)。
♣ 类名不可以叫main。。。别问我怎么知道的。。。
添加新文件,在项目名字上面右键
选择C++class
在选择父类的时候,如果不是一个控件,那么可以选择QObject
创建一个hello,一个world
这个是hello的头文件默认内容,自定义信号写在signals下
填写规则
信号
槽
在hello的头文件中添加CallWorld信号函数声明
在world的头文件中添加ReceiveHello槽函数声明
在源文件中加入实现,include一个QDebug,就可以在函数中加入qDebug指令输出字符。
在最开始的头文件中include两个类的头文件,并声明两个对应的对象(只声明)
然后对对象进行初始化
并connect
声明一个触发helloworld的方法
并且定义
♣ emit是一个发射信号指令,我也不太清楚加不加emit有什么区别。。。
然后把这个函数加入practice中进行调用
然后保存调试
OK,成功出现helloworld
❤ 2020.8.30 ❤
〇 信号和槽函数的重载
在hello的信号中增加一个重载函数,里面包含了心情变量
同时在world的槽函数中加入重载函数声明和定义
将信号发射函数修改
这时候,如果直接编译会报错
因为connect函数没发分辨到底用了哪个重载函数,这是需要使用函数指针
♣ 我已经不记得什么是函数指针了。。。。
用新的代码代替以前的
♣ 在声明一个成员函数的函数地址的时候,需要把该函数的作用域加在指针的前面
? 可是为什么这样就可以了呢?这里也没有注明是重载函数呀
然后保存编译运行,OK
但是还有个问题,就是“开心的”上面加了引号,这是由于“开心的”是QString类型,如果是char*类型就不会有引号,所以需要把他转换成char*
QString转成char*的方法
把槽函数改成这样
这样就没问题了
〇 信号连接信号以及信号的断开
首先修改程序,不是一运行就ready,而是有个ready按钮,按了之后才会ready。
创建按钮,连接按钮和槽函数(这个是槽函数么?视频里说是)
用这种方式创建按钮之后窗口的大小会改变,所以需要resize一下
编译运行
OK
接下来修改语句,声明两个无参的函数指针并相连,然后创建新的按钮,与无参的信号函数连接
编译运行,界面是这样的
分别点击两个按钮
nice!
要断开信号的连接,可以加入以下语句
就断开了
♦ 关于信号和槽的拓展
♦ 关于Qt4的connect函数的写法
〇 lambda表达式(并不懂。。什么时候用到再说)
♦ 使用lambda表达式实现点击按钮关闭窗口
♣ 使用lambda表达式的好处是lambda表达式是函数,所以可以在其中调用其他函数,以此来实现无参信号调用有参函数的效果
♣ lambda表达式一般用值传递[=]形式,用[&]有时候会报错(视频里说的)
〇 信号和槽总结