• Qt编程注意事项



    前言:
    要想学好QT,首先把本文章的学QT注意事项,牢记于心。

    一、Qt命名规则

    代码的命名规则有驼峰命名法和蛇形命名法,qt偏好驼峰命名法

    //蛇形命名法(c++/python偏好)
    student_count
    unordered_map
    priority_queue
    //驼峰名法(用大写字母进行单词分割)
    //大驼峰(,首字母大写,给Qt中内置的类和头文件命名,自定义类型也可以)
    #include 
    #include 
    		QSring str;
    		QWidget w;
    //小驼峰(首字母小写,给变量和函数命名)
    void connectTheSignal();
    setText("hello world");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    类的成员变量设置函数使用 set+成员变量名,获取成员变量的函数直接用成员变量名(如果是bool类型,有可能会用一些表示状态的术语,如isVisilble,hasFocus):

    //普通成员变量设置和获取
    void setText(QString text);
    QString text()const;
    //bool的成员变量设置和获取
    void setEnabled(bool enabled);
    bool isEnabled()const;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    二、Qt Creator 中的快捷键

    	运行  								ctrl +R
        编译  								ctrl +B
        帮助文档  							F1 ,点击F1两次跳到帮助界面
        跳到符号定义 							F2 或者ctrl + 鼠标点击
        注释 								ctrl+/
        字体缩放  							ctrl + 鼠标滚轮
        整行移动代码							ctrl + shift + ↑或↓
        自动对齐   							ctrl + i
        同名之间的.h和.cpp文件跳转				F4
        查找						    		ctrl+F
        生成函数声明的对应定义					alt+enter
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    三、如何使用帮助文档

    3.1 打开文档方法

    Qt不需要单独下载帮助文档,在安装的时候,就已经帮你下载好了。
    打开帮助文档有三种方法,实际编程的时候使用那种都可以。

    1. 光标放在要查找的类名/方法名上,直接按F1
      在这里插入图片描述
    2. Qt creator左侧边栏中直接用鼠标单击“帮助”’按钮。
      在这里插入图片描述
    3. 找到Qt的安装路径,在“bin”文件夹下找到assistant.exe,双击打开。
      在这里插入图片描述

    3.2 如何查看文档

    查看所用部件的相应成员函数( 本身的成员函数,继承过来的成员函数 ),主要是为了查看这个成员函数如何使用,包括函数的功能,参数,返回值。

    3.2.1 查看所用部件(类)的相应成员函数(功能,参数,返回值)

    下面以 QPushButton (普通按钮)为例:
    在这里插入图片描述

    1. 公有函数
      在这里插入图片描述
    2. 点击函数名字即可查看其相应用法:
      在这里插入图片描述
      在这里插入图片描述
    3. 很多时候,我们需要使用到继承过来的函数,如给按钮设置内容( setText() )即是从 QAbstractButton 继承过来:
      在这里插入图片描述
      点击“QAbstractButton”即可跳转到 QAbstractButton 公有函数的地方:
      在这里插入图片描述
      点击函数名字即可查看其用法:
      在这里插入图片描述
    4. 很多事情,我们可能需要在使用到某个函数时,再查看其用法。
      首先,需要先把函数的参数随便拿个数填好,然后,光标移动到函数名字的地方,再按“F1”即可跳转到此函数的使用说明:
      在这里插入图片描述

    3.2.2 查看部件的信号

    还是以 QPushButton 为例:

    1. 在 QPushButton 类中不能直接查看 Signals 的信息,需要在其基类“QAbstractButton ”中查找,然后在“QAbstractButton ”页面中找到目录,点击“Signals”:
      在这里插入图片描述
    2. 除了本身信号,还有继承过来的信号:
      在这里插入图片描述
    3. 点击信号名字,就可以查看信号的相关说明:
      在这里插入图片描述
      在这里插入图片描述

    3.2.3 查看部件的事件(所对应的虚函数如何编写)

    1. 部件常用事件主要在 QWidget 中声明,选择“Events”即可查看相关说明,且每个事件都对应着事件函数:
      在这里插入图片描述在这里插入图片描述

    四、对象模型(对象树DOM)

    4.1 对象树概念

    在qt中创建对象的时候会提供一个Parent对象指针,下面来解释这个Parent指针是干什么的:

    1. QObject是以对象树的形式组织起来的。
    2. 当创建一个QObject对象时,会看到QObject的构造函数接收一个QObject指针为参数,这个参数就是Parent,也就是父对象指针。这相当于,在创建QObject对象时,可以提供一个其父对象(指定父亲),我们创建的这个QObject对象会自动添加到其父对象的children()列表上。
    3. 当父对象析构的时候,其父对象的children()列表中的所有对象也会被析构(注意这里的父对象并不是继承意义上的父类)。
    4. 因此可以在代码中肆意创建对象,只要指定父对象,父对象包含管理释放(析构),那么子对象在父对象析构的时候会自动析构。
    5. 对象树中,析构的顺序和构造的顺序是相反的
    6. QWidget是能够在屏幕上显示一切组件的父类,QWidget是继承自QObject,因此也继承了这种对象树的关系,一个孩子自动的成为父组件的一个子组件,我们也可以自己删除子对象,它们会自动从其父对象列表中删除

    4.2 对象树构造及析构过程(释放对象)

    对象树是qt中非常重要的内容,主要用于自动析构对象。
    在qt中QObject是所有类的祖先,向下生成了许多子类,这样一个关系就叫做对象树。
    在这里插入图片描述
    使用时,需要通过setParent函数与对象间确定父子关系,之后子对象会进入父对象的children列表。
    当析构时,会先从父对象开始,先走父对象析构函数(注意,只是析构没有真正释放),然后依旧children列表析构子对象,直到走到叶子对象后,释放叶子对象,再返回父对象释放,直到回到一开始的父对象。
    当释放一个对象时,会把它所有的子对象都释放掉,因此,之后不能再去释放子对象,否则会发生二次释放的错误。
    学习:创建一个自定义的类,主要目的是,为了创建一个自定义析构函数,在析构函数中完成打印,让我们看到析构的过程

    1. 使用自己定义的MyLabel代替原来的QLabel,所谓的“继承”就是扩展,保持原有的功能不变,在给对象扩展出一个新的析构函数,
      在这里插入图片描述

    2. 通过自定义析构函数,打印一个自定义的日志,方便观察程序运行效果。
      在这里插入图片描述
      说明: 有日志,说明自定义析构函数被执行了,虽然没有手动delete,但是由于吧MyLabel挂在了对象树上,窗口被销毁时,会自动销毁对象树中所有的对象,MyLabel的析构就执行到了。

    3. 我们发现“对象被销毁”这几个中文变成了莫名其妙的文字,也就是出现了乱码问题。
      汉字有6万左右,常用的就4k个左右。
      使用一个大表格,具体每个汉字,都使用数字表示,这就是字符集。
      表示汉字的字符集有很多种,不同的字符集,表示同一个汉字,使用的数字不一样。
      目前,表示汉字字符集,主要有两种方式:

    1.GBK。(中国大陆)使用两个字节表示一个汉字。windows简体中文版,默认的字符集就是GDK。
    2.UTF-8/utf8。变长编码,表示一个符号,使用的字节数可以有变化,utf8中,一个汉字,一般是3个字节。
    Linux字符集默认utf8。

    当前字符串是那种编码方式,和字符串所在文件的编码方式是一致的。
    如何查看文件编码方式?
    以记事本的方式打开所要查看的文件,然后另存为文件,就可以看到该文件的编码方式。
    在这里插入图片描述

    如果显示UTF—8,说明文件就是UTF—8编码。
    如果显示的是ANSI,说明这个文件就是GBK编码。

    解决方法:

    1. Qt中提供了一个qDebug工具,借助这个,就可以完成打印日志的过程。(Qt中专门用来打印日志的工具,能自动处理编码方式)
    2. Qt中,有一个东西,QString,可以帮助我们自动的处理编码方式。

    结果如下:
    在这里插入图片描述

    使用qDebug,可以打印调试日志,也可以统一进行关闭!
    输出的日志是调试阶段给程序员看得,如果程序发布给用户,不需要用户看到这些日志。
    qDebug可以通过编译开关,来实现一键式关闭。

    在这里插入图片描述
    注意:关注内存泄漏问题,是融入我们DNA的事。

    五、Qt窗口坐标体系

    1. 认识坐标系:
      在这里插入图片描述
      拇指为x轴,食指为y轴,中指为z轴。
      坐标系的原点(0,0)就是屏幕的左上角/窗口的左上角;给Qt控件设置位置,就需要指定坐标,对于这个控件来说,坐标系原点是相对于父窗口/控件的。
      在这里插入图片描述
    2. 认识像素。
      坐标背后的单位:像素
      显示器本质是由一大堆发光的小灯泡构成的;
      在这里插入图片描述
    3. 实例:使用Qt坐标系设置控件的位置。
      move可以设置按钮坐标位置
      在这里插入图片描述

    补充:
    总结:

    如果当前程序界面比较固定,此时就会以图形化的方式来构造界面。
    如果当前程序界面经常要动态变化,此时就会以代码的方式来构造界面。
    也可以混合式(图形化和代码的方式都用了)构造界面。

  • 相关阅读:
    RocketMQ源码阅读(六)CommitLog
    香港服务器SAS和SATA硬盘比较,有哪些不同?
    微机-------8086/8088寻址方式
    智慧火灾应急救援:无人机、直升机航拍视角下的火灾应急救援检测数据集&代码
    React:五、React脚手架应用
    Dijkstra 邻接表表示算法 | 贪心算法实现--附C++/JAVA实现源码
    spring中的声明式事务
    JUC并发编程——四大函数式接口(基于狂神说的学习笔记)
    计算机毕业设计SSM电影票网上订票系统【附源码数据库】
    Python和Java应该如何选择?该怎么学?
  • 原文地址:https://blog.csdn.net/plj521/article/details/138686448