目录
准备工作
如下,我们再创建一个空的项目,当然了,里面会有一些自动生成的代码
有两种方式实现helloworld
图形化界面实现
我们进入这个设计模式,上文中提到了
Display Widgets
这里的组件是关于显示方面的
双击修改里面的内容,这个很像WPS里面的文本框,然后保存运行就可以看到我们的界面中多了一个Hello World
回到刚刚,当我们拖拽出来一个Label的时候,右边会多出来一个东西
返回到编辑就可以看到多出来这么一些东西
如何生成的
那么到底是怎么生成的呢?我们可以看中间生成的文件即可,上文中提到的ui_widget.h文件
在ui_widget.h中可以看到修改的体现,我们可以看到里面多出来了几行代码
代码实现
首先我们先关闭这个项目,在文件中可以直接关闭
创建好之后我们就在这个Widget类中去填写我们的函数,通常我们也是直接在这里写的,因为在main函数中,自动生成的代码中就会定义这个类,然后到这里就会执行这个类的构造函数
我们在堆上直接创建一个这样的东西,注意了这里大概率会提示未知,这是因为我们没有显示的包含头文件,Qt的头文件也很好包含的,因为是同名的
我们也可以看到有一个.h的小写的头文件,这是由于早期的标准没有规定下来形成的一种历史遗留物,我们选择上面大头风的
简单介绍一下这个标签
Qstring和string之间的关系
当我们看这里填写的提示的时候会发现
不过由于后面C++的发展,有了更好的标准,但是又不好删除,所以就和Qt自己的基础类同存了
label->setText()
向着里面填写你想要它显示的东西即可
运行生成
生成的文本默认在左上角
内存泄漏
内存泄漏要注意
内存泄漏是一件十分严重的事故
回到刚刚的问题上,为什么上面我们new了一个对象,不需要delete释放呢?这难道不会造成内存泄漏吗?为了理解这个问题,我们首先就要知道一个东西,N叉树
所以我们在一开始就把对象挂在了树上,让Qt统一进行管理释放,那么之前我们提到过在栈上开辟对象,那么就会出现一些bug
发现应该显示的hello world并没有按照预期在左上角显示
观察析构
为了更好的观察是是否析构了,我们再创建一个自己的类,首先我们创建一个新的项目
在项目中我们再创建一个类,这里在创建界面的下面就可以看到
我们让它继承QLabel,下面是包含头文件的选项,暂时不需要,后序可以手动添加
点击完成即可
这时候我们看到我们就多出来了一个头文件和一个类
生成了但是没有完全生成代码,于是我们还是得手动添加一下QLabel的头文件,手动添加一下
小技巧1:F4快速切换头文件和对应的cpp文件
最终目的就是自定义一个析构函数看到自动销毁的过程
小技巧2:Alt+Enter可以快速添加定义实现
会自动生成一些代码,方便我们使用
我们在析构中添加这么一个析构日志,可以帮助我们观察析构现象,这里有问题,我们后序再细谈
我们在widget中生成这个类,观察情况
运行,出来没有发现什么问题,我们在下面的应用程序输出中可以看到我们想要的结果
当我们把窗口删掉,触发析构的调用,我们发现有析构,当然这也是我们预想到的,但是好像不是我们想要的结果,显然是有问题的,也很容易找到是析构中我们添加的那一句C++的代码
乱码问题
这里我们就要解决中文乱码的问题了
首先想要明白乱码的问题,我们就要知道中文在计算机中是如果存储的,其实本质上存储的还是一个个的二进制数字
中文对应的编码数值,所以在不同的编码中相同的字对应的数值可能就会不一样
知道这一点之后,我们回到上面的乱码问题,文件中的字符串使用的编码格式和对应的Cpp的编码方式是一样的
想看这个文件的编码也很容易我们在想要看的文件中选择这边一个选项
我们用记事本打开这个.cpp文件
然后另存为就可以在下方看到这个文件的编码格式,显然这里的UTF-8的编码格式
主流方式还是UTF-8显示中文,所以我们没必要去更改文件的编码格式,这里出现乱码显然是终端的编码格式的不一致
qDebug()
注意这是一个定义出来的宏,所以看起来用法很奇怪,Qt提供了专门负责日志打印的函数,并且在内部实现了编码的统一,正常引入头文件,更正之前的代码,正常运行
正常没有问题出现,中文正常显示出来了
qDebug()的优点
不仅仅是日志打印,编码的统一,更重要的是一键式关闭,也就是说后序我们不需要的时候,可以通过一键式关闭的方式,把这些打印全部隐藏起来