目录
1.创建项目:
- qt的项目中有一个以.ui为后缀的文件,他本质是一个xml文件。
- qt中使用F4切换头文件和对应的源文件。
- 编写一个项目,有两种实现方式,一种是直接拖拽控件到设计页面,另一种通过纯代码的方式创建控件。
- 代码构造界面:将代码放到widget的构造函数中。
- 上古时期的qt使用小写风格的头文件声明风格(后面带.h后缀),在1998年C++标准成立。更改了原来的头文件风格,就是首字母大写,不加.h后缀的头文件风格。
- 控件可以创建在堆上也可以创建在栈上。建议创建在堆上,建立在堆上时,参数要传递当前this指针,可以给新对象指定其父对象。
- 以QLabel类举例:创建在堆上:QLabel l1=new QLabel(this);创建在栈上:QLabel l2;
2.Qt可以支持两套基础类:
- Qt 支持 C++ 的标准模板库(STL),并且 Qt 自己也实现了一套封装库,提供了类似的容器类和算法。这些 Qt 自己的类在很多情况下可以替代 STL,提供了一些额外的功能和更好的集成。
- Qt 的这些容器类通常与 Qt 的信号和槽机制更好地集成,并且在跨平台应用中有更好的兼容性。建议使用这些 Qt 提供的容器类,而不是 STL 容器。
- Qt版本的基础类在创建时,要大写Q和类的首字母。以vector举例:std::vectot<int>和QVector<int>。
3.节点的父子关系和对象树:
- 在Qt中,创建在堆上的对象,即使不手动释放,也不会造成内存泄漏。这些对象会在合适的时候被自动释放掉。原因是:对象被挂在了对象树上。
- 对象树本质是一个多叉树,它可以将前端界面上的各个元素组织起来。
- 对象树的各个节点之间会存在父子关系,子对象如果认定一个其他对象为父对象,那么父对象被销毁时,它的所有子对象也会自动被销毁。这种机制确保了资源的自动释放,避免了内存泄漏。
- 在子对象构造时,通过初始化列表将当前this指针设置为父对象的指针,来建立父子关系。
- 父对象可以有多个子对象,但每个子对象只有一个父对象。
- 通常,对象树的根节点是顶级窗口对象或应用程序对象,其他对象则是其子节点。
4.QLabel类:
- QLabel类,使用包含QLable头文件,使用后会在界面左上角显示QLabel对象包含的字符串。
- 创建在堆上:QLabel l1=new QLabel(this);
- 创建在栈上:QLabel l2;
- 创建好QLabel对象后,设置文本:l1->setText();括号中可以传递一个string的匿名对象;也可以直接传递双引号包括的字符串,原因是有一个重载函数来完成隐式类型的转换。
5.乱码问题:
- 乱码原因:有且只有一个,编码方式不匹配。
- 在计算机中,一个汉字占几个字节?这和具体的编码方式有关。目前,表示汉字的字符集主要有两种。
- 其一是GBK,使用两个字节表示一个汉字。一般windows简体中文版就使用GBK为默认字符集。
- 其二是UTF-8/utf8,变长编码,根据类型一般2~4个字节不等,但是在utf8中一个汉字一般是3个字节.Linux默认的编码格式就是utf8。
- 如何查看当前源文件是什么编码格式?将源文件使用记事本打开,打开后另存为,在另存为界面就能够看到当前源文件的编码格式。
- 解决乱码问题:如果要在Qt Creater中解决日志打印乱码问题,就需要统一编码格式,要么改终端打印日志的编码格式,要么改文件的编码格式。但是终端不好改,源文件主流的中文编码方式是utf8,改掉也不太合适。
- 想要解决Qt中,终端和文件编码不统一导致的乱码问题,有两种方法:
- 其一是使用QString对象存储字符串后再使用cout打印,QString对象可以自动处理编码格式;
- 第二种是使用专门的日志打印工具打印日志—qDebug()对象,QDebug相当于一个Qt中的类,使用要包含头文件<QDebug>,可以将它看作是cout来使用,具体使用格式为:qDebug()<<“字符串”;
- 后续如果要使用打印日志的方式输出一些调试信息,优先使用qDebug() ,它提供了一个开关,可以一次直接关闭所有调试信息的显示。
6.Qt命名规则:
- Qt命名规则:驼峰命名,使用单词首字母大写来分割多个单词。
- 小驼峰:首单词首字母小写,主要给变量/函数来命名。
- 大驼峰:首单词首字母大写,主要给类命名。
- 总而言之,代码风格具体怎么定,要入乡随俗,需要确保自己写的代码风格和已有代码的代码风格保持一致。