Qt全域性巨集和變數

2021-09-01 00:24:58 字數 3452 閱讀 1739

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_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()

其他一些函式:

該巨集用於定義某個類,禁止拷貝

#defineq_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

QT全域性巨集定義

cmake在cmakelists.txt中新增巨集定義,編譯flags這些資訊 qmake則在pro檔案中定義巨集定義增加 defined use high version 這樣就把use high version定義為了全域性巨集定義 效果等同於cmake中 add definitions dus...

全域性變數及巨集定義

1 巨集名,全域性變數名建議大寫 2 號開頭的都是預處理指令,預處理是發生在預編譯階段 編譯階段之前 對源程式檔案進行一些簡單的文字替換 vc 中編譯按鈕整合了預編譯和編譯的 3 全域性變數的作用域就是從定義處開始,到整個檔案的末尾 include 巨集定義 define pi 3.141592 這...

MFC巨集和全域性成員

mfc巨集和全域性成員 1 資料型別 byte 8位 無符號 word 16位 無符號 dword 32位 無符號 long 32位 有符號 uint 16位或32位 無符號 bool colorref 用於顏色的32位值 bstr 32位字元指標 lpcstr 字串常量32位指標 lpstr 字串...