• Qt全局宏和变量


    1.  Qt 全局宏定义

    Qt版本号:

     QT_VERSION :  (major << 16) + (minor << 8) + patch

    检测版本号:

    QT_VERSION_CHECK(major, minor, patch)((major<<16)|(minor<<8)|(patch))

    当使用命名空间时的一些宏定义:

    namespace QT_NAMESPACE {} //命名空间定义

    # define QT_PREPEND_NAMESPACE(name) ::QT_NAMESPACE::name

    # define QT_USE_NAMESPACE using namespace ::QT_NAMESPACE;

    # define QT_BEGIN_NAMESPACE namespace QT_NAMESPACE {

    # define QT_END_NAMESPACE }

    # define QT_BEGIN_INCLUDE_NAMESPACE }

    # define QT_END_INCLUDE_NAMESPACE namespace QT_NAMESPACE {

    # define QT_BEGIN_MOC_NAMESPACE QT_USE_NAMESPACE

    # define QT_END_MOC_NAMESPACE

    # define QT_FORWARD_DECLARE_CLASS(name) /

        QT_BEGIN_NAMESPACE class name; QT_END_NAMESPACE /

        using QT_PREPEND_NAMESPACE(name);

     

    # define QT_FORWARD_DECLARE_STRUCT(name) /

        QT_BEGIN_NAMESPACE struct name; QT_END_NAMESPACE /

        using QT_PREPEND_NAMESPACE(name);

    Q_GLOBAL_STATIC(type, name)用于定义一个全局的静态变量(线程安全的).用它来初始化一个对象指针(函数指针).

    Q_GLOBAL_STATIC_WITH_ARGS(type, name, arguments):同上,可带参数.

     

    Q_UNUSED():通常用于某个函数的参数,表明该参数未在方法体中使用.

    常用数据类型:

    qint8, quint8, qint16, quint16, qint32, quint32, qint64, quint64, qlonglong(=int64), qulonglong(=uint64)

    quintptr, qptrdiff, 作为指针是一样大的.如:

          sizeof(void *) == sizeof(quintptr)

          && sizeof(void *) == sizeof(qptrdiff)

    Qt有用的类型定义:uchar, ushort, uint, ulong

    实用内联函数:qAbs(), qRound(), qRound64(), qMin(), qMax(), qBound();

    try-catch宏:

    #ifdef QT_NO_EXCEPTIONS

    #  define QT_TRY if (true)

    #  define QT_CATCH(A) else

    #  define QT_THROW(A) qt_noop()

    #  define QT_RETHROW qt_noop()

    #else

    #  define QT_TRY try

    #  define QT_CATCH(A) catch (A)

    #  define QT_THROW(A) throw A

    #  define QT_RETHROW throw

    #endif

    每个QT_TRY对应一个QT_CATCH,不要在catch语句块中使用异常实例.

     

    调试相关函数:

    qDebug(), qWarnig(), qCritical(), Q_ASSERT()

     

    其他一些函数:

    该宏用于定义某个类,禁止拷贝

    #define Q_DISABLE_COPY(Class) /

        Class(const Class &); /

        Class &operator=(const Class &);

    qgetenv(), qputenv(), qIntCast(double 或float). qsrand(uint seed), qrand()

    2. Qt的内存管理函数

    void *qMalloc(size_t size);

    void qFree(void *ptr);

    void *qRealloc(void *ptr, size_t size);

    void *qMallocAligned(size_t size, size_t alignment)

    void *qReallocAligned(void *oldptr, size_t newsize, size_t oldsize, size_t alignment)

    void qFreeAligned(void *ptr)

    void *qMemCopy(void *dest, const void *src, size_t n);

    void *qMemSet(void *dest, int c, size_t n);

    注: 数组下标为-1的地址对于数组来说是越界访问了,但是这个地址是有意义的.这个地址就是所申请的数组存储空间的首地址的向前偏移一个单位(也就是偏移一个当前数组类型所对应的字节数)所对应的地址。这个地址由于没有跟着数组空间一起初始化,所以其中的数据是不确定的.如果是正在被系统或者其他应用程序使用中的地址空间,那么可以被访问,其中的数据的意义取决于被系统或者其他应用程序所写入的数据,但是访问后,有可能会引起系统或者其他应用程序异常。如果是没有被使用的地址,那么就是一个野地址,那么其中的数据是随机的,无意义的

     

    3. 环境变量设置函数

    qputenv():与putenv()基本类似,由于VC2005后废除了putenv()函数,所有定义了此函数,在VC环境中调用替代的函数,其他平台调用标准C库函数putenv().

    qgetenv():获取某个环境变量的值.

     

    4.自定义输出函数

    QtMsgHandler qInstallMsgHandler(QtMsgHandler h)

    其中:typedef void (*QtMsgHandler)(QtMsgType, const char *);

    利用该函数可定制自己的调试信息输出.

     

    5. 断言

    Q_ASSERT(bool test):当断言失败时,打印出警告信息,包含了源码文件名和行号.

    void Q_ASSERT_X(bool test, const char *where, const char *what)

     

    void Q_CHECK_PTR(void *pointer):检测非法指针,如果指针为0,打印警告信息.

     

    6.系统信息类QsysInfo

  • 相关阅读:
    [湖北省队互测2014] 没有人的算术 (非题解)
    普及常见图论算法整理
    普及常见数据结构板子整理
    Pisano Period
    退役了
    LOJ3246 「USACO 2020.1 Platinum」Cave Paintings
    LOJ3193 「ROI 2019 Day2」机器人高尔夫球赛
    LOJ3192 「ROI 2019 Day2」课桌
    LOJ6496 「雅礼集训 2018 Day1」仙人掌
    Luogu P4518 [JSOI2018]绝地反击
  • 原文地址:https://www.cnblogs.com/JeffreyCheung/p/5826045.html
Copyright © 2020-2023  润新知