溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Qt全局宏和變量

發(fā)布時(shí)間:2020-08-09 14:23:08 來源:網(wǎng)絡(luò) 閱讀:846 作者:WZM3558862 欄目:開發(fā)技術(shù)

Qt全局宏和變量  

工作中會(huì)用到QT全局函數(shù)和宏 現(xiàn)在搜集整理如下

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

檢測(cè)版本號(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è)對(duì)象指針(函數(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對(duì)應(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的地址對(duì)于數(shù)組來說是越界訪問了,但是這個(gè)地址是有意義的.這個(gè)地址就是所申請(qǐng)的數(shù)組存儲(chǔ)空間的首地址的向前偏移一個(gè)單位(也就是偏移一個(gè) 當(dāng)前數(shù)組類型所對(duì)應(yīng)的字節(jié)數(shù))所對(duì)應(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):檢測(cè)非法指針,如果指針為0,打印警告信息.

 

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


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI