Qt学习笔记(2)——Qt工程文件及基础知识

目录

〇 Qt工程文件及内容

 ○ 关于main函数的讲解

○ 项目管理文件(.pro文件)

○ .cpp文件

○ 项目界面文件

○ 命名规范和编译器的快捷键

〇 在界面中添加按钮

○ 创建工程

〇 对象树

〇 Qt窗口坐标系

〇 信号和槽(重点)

○ 用一个点击按钮关闭窗口的例子说明

○ 自定义信号和槽

〇 信号和槽函数的重载

〇 信号连接信号以及信号的断开

〇 lambda表达式(并不懂。。什么时候用到再说)

〇 信号和槽总结


❤ 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表达式一般用值传递[=]形式,用[&]有时候会报错(视频里说的)

 

〇 信号和槽总结

 

 

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值