• Qt全局定义


    一、QtGlobal头文件

    • 头文件中包含了Qt类库的一些全局定义,包括:
      • 基本数据类型
      • 全局函数
      • 宏定义

    二、基本数据类型

    在这里插入图片描述

    三、全局函数

    在这里插入图片描述

    四、宏定义

    1.Qt版本相关的宏

    1.1 QT_VERSION

    这个宏展开为数值形式 0xMMNNPP (MM = major, NN = minor, PP = patch) 表示 Qt 编译器版本,例如 Qt 编译器版本为 Qt 5.9.1,则 QT_VERSION 为 0x050901。这个宏常用于条件编译设置,根据 Qt 版本不同,编译不同的代码段。

    1.2 QT_VERSION_CHECK

    这个宏展开为 Qt 版本号的一个整数表示,用于版本判断的时候条件编译,如下示例:

    #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
    	#include 
    #else
    	#include 
    #endif
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.3 QT_VERSION_STR

    这个宏展开为 Qt 版本号的字符串,用于显示,比如将界面title设置为qt版本号:

     this->setWindowTitle(QT_VERSION_STR);
    
    • 1

    2. 内存字节序相关宏(内存数据使用的大小端)

    Q_BYTE_ORDERQ_BIG_ENDIANQ_LITTLE_ENDIAN
    Q_BYTE_ORDER 表示系统内存中数据使用的字节序;
    Q_BIG_ENDIAN 表示大端字节序;
    Q_LITTLE_ ENDIAN 表示小端字节序。
    这几个宏在需要判断系统字节序时才会用到,使用示例如下:

    #if Q_BYTE_ORDER == Q_LITTLE_ENDIAN			//当前系统是否使用的小端
      ...
    #else
      ...
    #endif
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.共享库相关宏定义

    • Q_DECL_IMPORTQ_DECL_EXPORT 在使用和设计共享库时,用于导入导出库的内容。

    4. 虚函数重载宏

    • Q_DECL_OVERRIDE在类定义中,用于重载一个虚函数,例如在某个类中重载虚函数 paintEvem(),可以定义如下:
    void paintEvent(QPaintEvent*) Q_DECL_OVERRIDE;
    
    • 1

    使用 Q_DECL_OVERRIDE 宏后,如果重载的虚函数没有进行任何重载操作,编译器将会报错。

    5.函数内不使用参数处理宏

    Q_UNUSED这个宏用于在函数中定义不在函数体里使用的参数,如果不使用该宏定义处理,编译器将会报出参数未使用的警告;宏定义使用示例如下,id不需要使用的情况:

    void MainWindow::on_imageSaved(int id, const QString &fileName)
    {
        Q_UNUSED(id);
        ui->LabInfo->setText (fileName);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    6. 调试类宏定义

    6.1 qDebug调试输出宏

    这是qt中的信息调试宏,还有其他不同等级的调试宏定义,qt中宏定义的源代码如下:

    #define qDebug QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).debug
    #define qInfo QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).info
    #define qWarning QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).warning
    #define qCritical QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).critical
    #define qFatal QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).fatal
    
    • 1
    • 2
    • 3
    • 4
    • 5

    以上宏定义都是用于调试信息输出,使用如下:

        qDebug()<<"this is a debug example";
    
    • 1

    6.2 Q_FUNC_INFO

    函数信息宏,包含函数所属类和参数信息,使用如下:

        qDebug()<<Q_FUNC_INFO<<"this is a debug example";
    
    • 1

    该宏一般和qDebug配合使用,可用于快速定位调试信息位置。
    调试信息输出如下:
    在这里插入图片描述

    7. 循环语句宏

    7.1 forever死循环宏定义

    和while(1)类似,其底层使用for( ; ; )实现,使用方法如下:

    	forever
        {
            ...
        }
    
    • 1
    • 2
    • 3
    • 4

    7.2 foreach容器类遍历宏

    可遍历链表、vecter、hash等各种容器类的数据结构。使用示例如下:

    //下面这个循环语句用来查找可以用的串口端口
    //不确定有多少串口可用,也就不知道循环多少次,所以用foreach(不知道用的就百度)
    foreach (const QSerialPortInfo &info,QSerialPortInfo::availablePorts())		
    {
    	QSerialPort serial;		//在循环语句内部实例化类,因为可用串口不一定只就一个
    	serial.setPort(info);   //设置能够用的串口端口
    	if(serial.open(QIODevice::ReadWrite))		//用ReadWrite可读写的方式打开串口
    	{
    		//记录可用的uart名字serial.portName(),前面的ui->PortBox->addItem不用管,这个是界面里面的。
    		ui->PortBox->addItem(serial.portName());
    		//然后关闭串口,因为这段代码打开串口只是为了查找串口可以用不可用而已。
    		serial.close();			
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    YOLOv8独家改进:逐元素乘法(star operation)二次创新 | 微软新作StarNet:超强轻量级Backbone CVPR 2024
    51单片机的智能台灯控制系统仿真( proteus仿真+程序+原理图+报告+讲解视频)
    最好用的Boost.Asio:现代C++网络编程
    以K近邻算法为例,使用交叉验证优化模型最佳参数
    冰冰学习笔记:泛型编程---模板简介
    leetcode 6136-算术三元组的数目
    浅谈 kafka
    Spring事务的实现方式和实现原理
    编写自己的目标跟踪算法
    软件工程导论---极限编程
  • 原文地址:https://blog.csdn.net/weixin_38739598/article/details/134233095