公司网站建设哪家好,官方网站开发哪家好,同心县建设局网站,软件开发专业就业前景如何目录
一、使用Qt Creator创建qt项目
二、项目文件解析
三、Qt中创建图形化界面的程序的两种方法
四、对象树
五、Qt中处理打印乱码问题的利器#xff1a;qDebug() 一、使用Qt Creator创建qt项目
1.选择项目模板 选中第一类模板Application(Qt应用程序#xff0c;包含普…目录
一、使用Qt Creator创建qt项目
二、项目文件解析
三、Qt中创建图形化界面的程序的两种方法
四、对象树
五、Qt中处理打印乱码问题的利器qDebug() 一、使用Qt Creator创建qt项目
1.选择项目模板 选中第一类模板Application(Qt应用程序包含普通窗体程序和QtQuick程序) 然后选中右侧的第一个子模版Qt Widgets Application(普通窗体模板基于部件的窗体界面程序)。
2.选择项目路径 注意qt项目所在的路径不能包含中文 3.选择构建系统
选中qmake。
qmake是一个构建工具(build tool)支持跨平台构建用于自动生成makefile文件。qmake用于编辑后缀为.pro的文件。
cmake是一个跨平台构建工具本身不是编译器。
4.选择qt项目中自动生成父类的类型 使用Qt Creator创建qt项目的中会自动生成一些代码自动生成的代码中就包含一个类此处就是选择该类的父类(Qt中内置的类)是什么。qt自动生成的父类默认有三种
QMainWindow主窗口类表示一个完整的应用程序窗口。可以包含菜单栏、工具栏、状态栏等。
QWidget最简单最基本的窗体程序里面可以有多个控件实现程序功能。
QDialog表示一个对话框。
上面三种类的关系
QMainWindow和QDialog都是QWidget的派生类。
注意Qt中内置的类都是以Q为前缀开头的。
二、项目文件解析
以qt自动生成的默认父类是Qwidget来分析 后缀为.pro的文件工程文件。工程新建好后文件列表中有一个以.pro为后缀的文件它是qmake自动生成的文件是用来生成makefile文件的。
widget.h主要是声明Widget类(Widget类继承自QWidget)其中Widget类中的成员变量是命名空间Ui中的类该类将在ui_widget.h中继承Ui_Widget类。
main.c用于构造Widget类并执行其相应的方法。
widget.cpp用于实现Widget类(实现构造函数、析构函数、其他成员函数)该文件会包含头文件widget.h和ui_widget.h。注意在Widget类的构造函数中创建控件对象。
widget.ui其实是一个xml文件qt会根据UI设计器中的控件帮我们在该文件中生成相应的内容。
ui_widget.h该文件中包含类Ui_Widget的声明和定义当我们通过拖拽控件生成图形界面时比如拖拽了一个Label控件然后此时widget,ui文件就会生成相应的Label控件的信息在编译期间qt会根据widget.ui中关于Label控件的信息在ui_widget.h中生成关于该Label控件的代码然后执行生成图形化界面。
三、Qt中创建图形化界面的程序的两种方法
这里创建一个简单的Label控件。
1.直接使用C代码的方式创建界面。 Qt中一些容器的头文件基本都被内置当我们使用QString,QVector(封装C中的容器类)等时不必包含其头文件。
2.使用图形化方式。通过form file(也就是使用Qt Designer拖拽控件的方式或直接在Qt Creator中修改.ui文件来生成图形界面)。
.ui文件其实是一个xml格式文件qmake在编译期间根据这个xml文件会在ui_widget.h文件中生成生成一些C代码从而构造出完整的图形界面。 四、对象树
上面我们在堆上new了一个Label类但是没有释放空间会造成内存泄露吗答案是不会的。
在Qt中的对象树会把我们在堆上new的各个控件组织起来目的是为了把这些控件对象的生命周期由对象树统一管理统一释放这些控件。
如果在栈上创建控件对象那么就会导致对象提前销毁当main.c中要执行w.show()此时w的构造函数执行完毕在栈上创建的控件对象已析构销毁无法显示该Label控件内容。
注意new对象的时候一定要将this指针传入到创建的控件对象中这样才可以将该控件挂在对象树上。
验证对象树是否会自动释放它组织的控件对象
我们现在要自己创建一个MyLabel类该类继承自QLabel类并且MyLabel类的析构函数里有打印信息的代码用以验证MyLabel是否析构。
新建一个qt项目TestObjectTree
然后在该项目中让qt帮我们生成一个继承自QLabel的类 然后将这个继承自QLabel的类挂到对象树上 当我们运行程序会生成一个窗体控件该窗体控件(其实就是QWidget类)里面有标签控件的内容然后我们关闭该窗体控件终端就会打印出MyLabel类对象析构函数中的内容因此证明由对象树组织的控件会被同意释放。
五、Qt中处理打印乱码问题的利器qDebug()
在qt中当我们使用C中的打印中文时会出现乱码问题。这是由于字符编码一致导致的。
常见的字符编码集
GBK一个汉字占2个字节Windows下的默认字符编码集。
UTF-8/utf8一个汉字一般占3个字节Linux下的默认字符编码集
在vs2019中使用的是Windows下的默认字符编码集GBK 在Windows环境下qDebug()可以处理字符编码集不同导致的乱码问题因此在qt中我们以后就使用qDebug()输出日志/或打印信息而不是使用cout。
在Linux中开发Qt程序时也可以使用cout因为Linux默认字符编码集是utf8和qt相同。
注意使用qDebug()时要包含头文件#include QDebug
使用qDebug()还有一个好处就是打印的调试日志可以统一关闭或打开。