QT杂项

Qt 全局宏定义

  1. Qt版本号: QT_VERSION :  (major << 16) + (minor << 8) + patch
  2. 检测版本号:QT_VERSION_CHECK(major, minor, patch)((major<<16)|(minor<<8)|(patch))
  3. 当使用命名空间时的一些宏定义:
    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);
  1. Q_GLOBAL_STATIC(type, name)用于定义一个全局的静态变量(线程安全的).用它来初始化一个对象指针(函数指针).

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

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

  4. 常用数据类型:
    qint8, quint8, qint16, quint16, qint32, quint32, qint64, quint64, qlonglong(=int64), qulonglong(=uint64)
    quintptr, qptrdiff, 作为指针是一样大的.如:
    sizeof(void *) == sizeof(quintptr)&& sizeof(void *) == sizeof(qptrdiff)

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

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

  7. 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语句块中使用异常实例.
  1. 调试相关函数:
    qDebug(), qWarnig(), qCritical(), Q_ASSERT()

  2. 其他一些函数:
    该宏用于定义某个类,禁止拷贝

#define Q_DISABLE_COPY(Class) /
    Class(const Class &); /
    Class &operator=(const Class &);

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

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

环境变量设置函数

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

qputenv(const char *varName, const QByteArray& value);

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

自定义输出函数

QtMsgHandler qInstallMsgHandler(QtMsgHandler h)

其中:typedef void (*QtMsgHandler)(QtMsgType, const char *);
利用该函数可定制自己的调试信息输出.

断言

Q_ASSERT(bool test):当断言失败时,打印出警告信息,包含了源码文件名和行号.
void Q_ASSERT_X(bool test, const char *where, const char *what)
void Q_CHECK_PTR(void *pointer):检测非法指针,如果指针为0,打印警告信息

系统信息类QsysInfo

qInstallMessageHandler自定义输出函数,打印日志

此函数在使用Qt消息处理程序之前已定义。返回一个指向前一个消息处理程序。
消息处理程序是一个函数,用于打印qDebug,qWarning,qCritical和qFatal的错误消息。Qt库(调试模块)包含成百上千的警告信息,打印时(通常是无效的函数参数)发生内部错误。Qt构建在release模式下还包含一些除了QT_NO_WARNING_OUTPUT和/或QT_NO_DEBUG_OUTPUT之外的警告已经设置在编译。如果你实现自己的消息处理程序,需要完全控制这些消息。
 只有一个消息处理程序可以被定义,因为这通常是在应用程序的基础上完成控制调试输出。
 恢复消息处理程序,调用qInstallMessageHandler(0)。

Qt 之 qInstallMessageHandler(输出详细日志)
https://blog.csdn.net/liang19890820/article/details/51838096
Qt 之 qInstallMessageHandler(重定向至文件)
https://blog.csdn.net/liang19890820/article/details/51838379

Qt::ApplicationAttribute枚举

枚举名 详解
Qt::AA_DontShowIconsInMenus 2
Qt::AA_DontShowShortcutsInContextMenus 28
Qt::AA_NativeWindows 3
Qt::AA_DontCreateNativeWidgetSiblings 4
Qt::AA_PluginApplication 5
Qt::AA_DontUseNativeMenuBar 6
Qt::AA_MacDontSwapCtrlAndMeta 7
Qt::AA_Use96Dpi 8
Qt::AA_SynthesizeTouchForUnhandledMouseEvents 11
Qt::AA_SynthesizeMouseForUnhandledTouchEvents 12
Qt::AA_UseHighDpiPixmaps 13
Qt::AA_ForceRasterWidgets 14
Qt::AA_UseDesktopOpenGL 15
Qt::AA_UseOpenGLES 16
Qt::AA_UseSoftwareOpenGL 17
Qt::AA_ShareOpenGLContexts 18
Qt::AA_SetPalette 19
Qt::AA_EnableHighDpiScaling 20
Qt::AA_DisableHighDpiScaling 21
Qt::AA_UseStyleSheetPropagationInWidgetStyles 22
Qt::AA_DontUseNativeDialogs 23
Qt::AA_SynthesizeMouseForUnhandledTabletEvents 24
Qt::AA_CompressHighFrequencyEvents 25
Qt::AA_CompressTabletEvents 29
Qt::AA_DontCheckOpenGLContextThreadAffinity 26
Qt::AA_DisableShaderDiskCache 27
Qt::AA_DisableWindowContextHelpButton 30

QCoreApplication::applicationDirPath()

返回包含应用程序可执行文件的目录。
例如,如果您已在C:\ Qt目录中安装了Qt,并且运行了regexp示例,则此函数将返回“C:/ Qt / examples / tools / regexp”。
在macOS和iOS上,这将指向实际包含可执行文件的目录,该目录可能位于应用程序包内(如果应用程序是捆绑的)。
警告:在Linux上,此函数将尝试从/ proc文件系统获取路径。 如果失败,则假定argv [0]包含可执行文件的绝对文件名。 该函数还假定应用程序未更改当前目录。
注:本文为工作时在网上看到的,当时做的笔记,如果涉及抄袭,请联系本人删除

你可能感兴趣的:(Qt)