• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 319, comments - 22, trackbacks - 0, articles - 11
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            Qt全局宏和變量

            Posted on 2011-07-26 06:53 RTY 閱讀(4273) 評(píng)論(0)  編輯 收藏 引用 所屬分類: QtC/C++轉(zhuǎn)載隨筆

            1.  Qt 全局宏定義

            Qt版本號(hào):

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

            檢測版本號(hào):

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

            當(dāng)使用命名空間時(shí)的一些宏定義:

            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)用于定義一個(gè)全局的靜態(tài)變量(線程安全的).用它來初始化一個(gè)對象指針(函數(shù)指針).

            Q_GLOBAL_STATIC_WITH_ARGS(type, name, arguments):同上,可帶參數(shù).

             

            Q_UNUSED():通常用于某個(gè)函數(shù)的參數(shù),表明該參數(shù)未在方法體中使用.

            常用數(shù)據(jù)類型:

            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

            實(shí)用內(nèi)聯(lián)函數(shù):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

            每個(gè)QT_TRY對應(yīng)一個(gè)QT_CATCH,不要在catch語句塊中使用異常實(shí)例.

             

            調(diào)試相關(guān)函數(shù):

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

             

            其他一些函數(shù):

            該宏用于定義某個(gè)類,禁止拷貝

            #define Q_DISABLE_COPY(Class) /

                Class(const Class &); /

                Class &operator=(const Class &);

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

            2. Qt的內(nèi)存管理函數(shù)

            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);

            注: 數(shù)組下標(biāo)為-1的地址對于數(shù)組來說是越界訪問了,但是這個(gè)地址是有意義的.這個(gè)地址就是所申請的數(shù)組存儲(chǔ)空間的首地址的向前偏移一個(gè)單位(也就是偏移一個(gè)當(dāng)前數(shù)組類型所對應(yīng)的字節(jié)數(shù))所對應(yīng)的地址。這個(gè)地址由于沒有跟著數(shù)組空間一起初始化,所以其中的數(shù)據(jù)是不確定的.如果是正在被系統(tǒng)或者其他應(yīng)用程序使用中的地址空間,那么可以被訪問,其中的數(shù)據(jù)的意義取決于被系統(tǒng)或者其他應(yīng)用程序所寫入的數(shù)據(jù),但是訪問后,有可能會(huì)引起系統(tǒng)或者其他應(yīng)用程序異常。如果是沒有被使用的地址,那么就是一個(gè)野地址,那么其中的數(shù)據(jù)是隨機(jī)的,無意義的

             

            3. 環(huán)境變量設(shè)置函數(shù)

            qputenv():與putenv()基本類似,由于VC2005后廢除了putenv()函數(shù),所有定義了此函數(shù),在VC環(huán)境中調(diào)用替代的函數(shù),其他平臺(tái)調(diào)用標(biāo)準(zhǔn)C庫函數(shù)putenv().

            qgetenv():獲取某個(gè)環(huán)境變量的值.

             

            4.自定義輸出函數(shù)

            QtMsgHandler qInstallMsgHandler(QtMsgHandler h)

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

            利用該函數(shù)可定制自己的調(diào)試信息輸出.

             

            5. 斷言

            Q_ASSERT(bool test):當(dāng)斷言失敗時(shí),打印出警告信息,包含了源碼文件名和行號(hào).

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

             

            void Q_CHECK_PTR(void *pointer):檢測非法指針,如果指針為0,打印警告信息.

             

            6.系統(tǒng)信息類QsysInfo

            亚洲精品乱码久久久久久蜜桃| 精品无码人妻久久久久久| 99久久免费国产精品特黄| 久久婷婷是五月综合色狠狠| 久久综合成人网| 久久久久久亚洲AV无码专区| 国产69精品久久久久777| 国产日韩久久免费影院| 久久青青草视频| 国产精品久久久久乳精品爆| 久久亚洲精品成人无码网站| 久久99热国产这有精品| 无码国内精品久久综合88 | 久久乐国产综合亚洲精品| 一本久久a久久精品亚洲| 国产精品久久久久一区二区三区 | 色狠狠久久综合网| 久久综合九色综合97_久久久| 久久亚洲高清综合| 亚洲天堂久久精品| 蜜臀av性久久久久蜜臀aⅴ| 久久青青草原精品国产不卡| 久久99精品久久久久久hb无码 | 无码国内精品久久人妻蜜桃| 精品国产婷婷久久久| 国产精品一久久香蕉国产线看| 四虎影视久久久免费| 久久精品国产只有精品66| 久久久九九有精品国产| 国产精品无码久久综合| 亚洲女久久久噜噜噜熟女| 亚洲国产成人精品久久久国产成人一区二区三区综 | 国产成人久久精品激情| 亚洲国产一成人久久精品| 亚洲国产精品综合久久网络 | 国产精品欧美亚洲韩国日本久久| 久久99精品久久久久子伦| 少妇精品久久久一区二区三区| 一本色道久久综合狠狠躁篇| 亚洲欧洲精品成人久久曰影片| 久久久久国产亚洲AV麻豆|