Qt全局宏和变量
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)用于定义一个全局的静态变量(线程安全的).用它来初始化一个对象指针(函数指针).
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()
其他一些函数:
该宏用于定义某个类,禁止拷贝
#define Q_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全局宏和变量的更多相关文章
- QT全局宏变量的实现
qt中如何实现定义一个宏,在整个工程中都可以实现呢?下面我来写一个亲测的例子: pro中添加如下宏定义代码: DEFINES += HELLO=\"$$PWD/\" DEFINES ...
- Android.mk 常用宏和变量
android ndk开发有一个重要的文件 Android.mk,他虽然重要,但是对它进行深入介绍的文档却比较的少,这里将对Android.mk中常用的宏和变量进行说明: 由于这一部分的内容多,资料零 ...
- wex5 教程 之 图文讲解 全局可观察变量与登陆状态全局控制
一 先说说,这两个概念是什么意思 全局可观察变量?没听说过,只听过全局变量,那你out了,因为我要充分发挥绑定技术来控制页面部局,组件的隐藏与显示,文字内容,样式改变.看我博文大家知道,我想用绑定技术 ...
- C++全局和静态变量初始化
转自:http://www.cnblogs.com/zhenjing/archive/2010/10/15/1852116.html 对于C语言的全局和静态变量,不管是否被初始化,其内存空间都是全局的 ...
- iOS开发——路径篇&混编路径与全局宏路径
混编路径与全局宏路径 最近在做东西的时候有一个地方要用到一个第三方库的,但是目前swift版的还没有找到,自己又不想写(其实是不会写),所以就想到了混编,但是中间出现了好多问题,其中印象最深的就是桥接 ...
- QT全局热键(用nativeKeycode封装API,不跨平台)
在网上找了很长时间,大家都提到了一个QT全局热键库(qxtglobalshortcut),支持跨平台.在这篇文章中,我将只展示出windows平台下全局热键的设置. 这里提供的方法是在MyGlobal ...
- iOS用全局宏的概念理解xcode中的设置 preprocessor macros
ios有没有全局宏,或者在工程属性里设置宏? 比如我设置了一个宏叫IOS, 在所有/整个工程的代码里这个宏都是有效的. ------解决方案-------------------- 在工程的设置属性里 ...
- SW4STM32 全局宏定义
/************************************************************************************ * SW4STM32 全局宏 ...
- iOS Swift3 用全局“宏”时要注意的问题
当你需要定义一个APP全局“宏”来调用 UserDefaults.standard里存储的值的时候, 一定要将这个“宏”定义为计算属性,否则你得到的值只会在APP启动的时候计算一次. 示例如下: va ...
随机推荐
- maven 搭新建成之后 无法创建 src/main/java 目录解决
maven项目创建后 创建 src/main/java 和 src/main/test 会报错,目录已存在 打开build path 界面 src/main/java 和 ...
- jquery的2.0.3版本源码系列(5):349-817行,extend添加的工具方法
expando 生成唯一JQ字符串(内部)noconflict避免冲突isReady DOM是否加载完成(DOMContentLoaded)readyReady
- WebForm页面间传值方法(转)
Asp.NET WEB FORMS 给开发者提供了极好的事件驱动开发模式.Asp .NET为我们提供了三种方式,一种是可以通过用QueryString来传送相应的值,再一种是通过session变量来传 ...
- 09 Linear Regression
线性回归假设 错误衡量/代价函数---均方误差 最小化样本内代价函数 只有满秩方阵才有逆矩阵 线性回归算法 线性回归算法是隐式迭代的 线性回归算法泛化可能的保证 线性分类是近似求解,线性回归是解析求解 ...
- NHibernate教程(21)——二级缓存(下)
本节内容 引入 使用NHibernate二级缓存 启用缓存查询 管理NHibernate二级缓存 结语 引入 这篇我还继续上一篇的话题聊聊NHibernate二级缓存剩下的内容,比如你修改.删除数据时 ...
- !终端伪装测试之fuck校园网
众所周知,中国校园网络是最特么弱的网络构架之一,因此也成为众多黑客和学生的攻击对象-肉鸡.为什么学生也是主要报复者呢,我想主要是源于对学校的愤恨吧,不多说了,我这次将介绍一下我的一个个人测试--对学校 ...
- php的mysql语句里变量加不加单引号问题
第一种[{$_GET['id']}加不加单引号都能正常执行没问题] $sql = "select * from `news` where `id` = {$_GET['id']}" ...
- 【2017集美大学1412软工实践_助教博客】个人作业3——个人总结(Alpha阶段)
题目 个人作业3--个人总结(Aplha阶段) 成绩公示 评分项 alpha过程的总结 5个问题 自我评价表 评论区互动 总分 分值 4 2.5 2.5 1 10 201221123032 1 1 2 ...
- 团队作业8——Beta 阶段冲刺7th day
一.当天站立式会议 二.每个人的工作 (1)昨天已完成的工作(具体在表格中) 完善支付功能 (2)今天计划完成的工作(具体如下) 测试与正式发布 (3) 工作中遇到的困难(在表格中) 成员 昨天已完成 ...
- bean的单例
通过改变中的scope属性,默认是singleton单例.而prototype则指定每getbean得到的都是不同实例. 验证代码: ①:验证默认singleton //验证<bean id=& ...