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)用于定義一個全局的靜態(tài)變量(線程安全的).用它來初始化一個對象指針(函數(shù)指針).
Q_GLOBAL_STATIC_WITH_ARGS(type, name, arguments):同上,可帶參數(shù).
Q_UNUSED():通常用于某個函數(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
實用內(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
每個QT_TRY對應(yīng)一個QT_CATCH,不要在catch語句塊中使用異常實例.
調(diào)試相關(guān)函數(shù):
qDebug(), qWarnig(), qCritical(), Q_ASSERT()
其他一些函數(shù):
該宏用于定義某個類,禁止拷貝
#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ù)組下標為-1的地址對于數(shù)組來說是越界訪問了,但是這個地址是有意義的.這個地址就是所申請的數(shù)組存儲空間的首地址的向前偏移一個單位(也就是偏移一個當前數(shù)組類型所對應(yīng)的字節(jié)數(shù))所對應(yīng)的地址。這個地址由于沒有跟著數(shù)組空間一起初始化,所以其中的數(shù)據(jù)是不確定的.如果是正在被系統(tǒng)或者其他應(yīng)用程序使用中的地址空間,那么可以被訪問,其中的數(shù)據(jù)的意義取決于被系統(tǒng)或者其他應(yīng)用程序所寫入的數(shù)據(jù),但是訪問后,有可能會引起系統(tǒng)或者其他應(yīng)用程序異常。如果是沒有被使用的地址,那么就是一個野地址,那么其中的數(shù)據(jù)是隨機的,無意義的
3. 環(huán)境變量設(shè)置函數(shù)
qputenv():與putenv()基本類似,由于VC2005后廢除了putenv()函數(shù),所有定義了此函數(shù),在VC環(huán)境中調(diào)用替代的函數(shù),其他平臺調(diào)用標準C庫函數(shù)putenv().
qgetenv():獲取某個環(huán)境變量的值.
4.自定義輸出函數(shù)
QtMsgHandler qInstallMsgHandler(QtMsgHandler h)
其中:typedef void (*QtMsgHandler)(QtMsgType, const char *);
利用該函數(shù)可定制自己的調(diào)試信息輸出.
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.系統(tǒng)信息類QsysInfo