Qt入门学习之Qt全局定义

头文件包含了Qt类库的一些全局定义,包括基本的数据类型,函数和宏。一般的Qt类的头文件都会包含该文件中,所以不要显示的包含该文件也可以使用其中定义的内容。

1. 数据类型的定义

为确保在各个平台上的各个数据类型都有统一的长度,Qt为各个常见的数据类型定义了类型的符号,如:qint8就是signed char的类型定义:
typedef signed char qint8

2.函数

头文件包含了一些常用的函数的定义,这些函数多以模板类型作为参数,返回相应的模板类型,这个模板类型可以用任何其他类型替换。若以double和float类型数作为参数的,一般有连个参数版本的同名函数,如:qFuzzyIsNull(double b)和qFuzzyIsNull(float f)。
如:T qAbs(const T &value):返回变量value的绝对值
其中T即是模板类型,可以使用任何气体类型替换。

除了头文件中定义的一些常用函数定义以外,还有些基础数学运算函数在头文件中定义。

3.宏定义

头文件中定义了很多宏,常见的有如下宏:

  • QT_VERSION-----这个宏展开为数值形式0xMMNNPP(MM=major,NN=minor,PP=patch)表示Qt编译器的版本,如Qt编译器的版本为Qt5.9.1,则QT_VERSION为0x050901.这个宏常被用于条件编译设置,根据Qt版本不同,编译不同的代码段,如:
    #if QT_VERSION>=0x040100
    ………………………………
    #else
    ………………………………
    #endif

  • QT_VERSION_CHECK------这个宏展开为Qt版本号的一个整数表示
    #if(QT_VERSION>=QT_VERSION_CHECK(5.0.0))
    ………………………………
    #else
    ………………………………
    #endif

  • QT_VERSION_STR—这个宏展开为Qt版本号的字符串,如:“5.0.0”

  • Q_BYTE_ORDER、Q_BIG_ENDIAN、Q_LITTLE_ENDIAN------
    Q_BYTE_ORDER:表示系统内存中数据的字节序
    Q_BIG_ENDIAN:表示大端字节序
    Q_LITTLE_ENDIAN:表示小端字节序
    这些宏在判断系统字节序时会用到,如:
    #if Q_BYTE_ORDER==Q_LITTLE_ENDIAN
    ………………………………
    #endif

  • Q_DECL_IMPORT和Q_DECL_EXPORT
    在使用或设计共享库时,用于导入或者到处库的内容

  • Q_DECL_OVERRIDE
    在类定义中用于重载一个虚函数,例如在某个类中重载虚函数painEvent(),可以定义如下:
    void painEvent(QPainEvent*) Q_DECL_OVERRIDE
    注意:使用Q_DECL_OVERRIDE宏后, 重载的虚函数如果没有进行任何重载操作,编译器会报错。

  • Q_DECL_FINAL
    这个宏用于将一个虚函数定义为终极级别,不能再被重载,如果定义的是一个类,这个类不能再被继承。如:
    class QRect Q_DECL_FINAL{
    …………………………
    };

  • Q_UNUSED(name)
    这个宏用于函数中定义不在函数里使用的参数,如:
    void MainWindow::on_imageSaved(int id,……)
    {
    Q_UNUSED(id);
    ……………………
    }
    id 未用,用这个宏定义,编译器就不会出现参数未使用警告

  • foreach(variable,container)
    这个foreach(variable,container)用于容器类的遍历,后续章节有讲解

  • forever
    forever用于构建一个无限循环,如:
    forever{
    …………
    }

  • qDebug(const char *message,……)
    在debugger窗体显示信息,如编译器设置了Qt_NO_DEBUG_OUTPUT,则不作任何输出,如:
    qDebug("……")

类似的宏还有qWarning、qCritical、qFatal、qInfo等,也是用于debugger窗体显示信息。

猜你喜欢

转载自blog.csdn.net/cainiaoxiakexing/article/details/88735653