`
duyouhua1214
  • 浏览: 236275 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Qt全局宏和变量

    博客分类:
  • 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

 

来源:http://www.cppblog.com/lauer3912/archive/2011/07/26/151837.html

分享到:
评论

相关推荐

    QT 使用全局变量的方法 - 郭小郭的专栏 - CSDN博客1

    ### 方法二:创建类来存储全局变量和函数(使用`static`关键字) 这是更推荐的方法,因为它允许更好的封装和管理。下面是如何实现的: 1. 在一个头文件(例如`temp.h`)中定义一个类,并在类中声明静态成员变量: ...

    QT设置可变的全局变量

    定义一个结构体,里面包含你要公共使用的变量. 然后在主程序 new一个这个结构体的指针. 然后在每个界面类里定义一个这个结构体的指针. 然后在界面初始化时将你那个new出来的指针传递进界面. 这样每个界面都可以访问...

    Ubuntu 14.04 + QT 全局变量的使用以及double、字符串类型互转

    总的来说,通过理解和熟练运用全局变量以及double和字符串之间的转换,你可以在Ubuntu 14.04上的QT环境中有效地开发出功能丰富的计算器应用。不过,一定要注意良好的编程实践,如限制全局变量的使用,保持代码清晰和...

    QT 不同文件直接变量调用 示例

    除了全局变量和函数调用,QT的信号与槽机制是另一种强大的跨对象通信方式。它允许对象之间异步地传递消息。当你在一个对象中触发一个信号时,与之相连的槽函数会在适当的时机被调用。例如: ```cpp // sender.h ...

    Qt 多线程访问同一个变量

    标题"Qt 多线程访问同一个变量"涉及到的是如何在多线程环境下确保对共享资源(此处为一个全局变量)的安全访问。描述中提到了使用互斥锁来解决这个问题,并通过创建两个线程ThreadA和ThreadB来演示这一过程。 首先...

    静态库和动态库里的全局变量(或类的静态成员变量)共享和独立的问题

    在A中定义有全局变量X(或类的静态成员变量),则在动态库B中访问的X,与可执行程序C中访问的X是同一个变量还是两个不同的变量? 答案:是两个不同的变量。 2. 工程中包含动态库A,动态库B,可执行程序C。C依赖于A和...

    多线程同时操作全局变量的出错演示

    然而,多线程编程也带来了一些挑战,尤其是当多个线程同时访问共享资源,如全局变量时,可能会出现竞态条件(Race Condition)和其他并发问题。本文将深入探讨标题“多线程同时操作全局变量的出错演示”所涉及的知识...

    qt线程共享数据 信号和槽方式

    即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的。 Qt 线程间共享数据是本文介绍的内容,多的不说,先来啃内容。Qt线程间共享数据主要有两种方式...

    Qt连接mysql数据库,全局变量定义db

    Qt连接mysql数据库,全局变量定义db

    Qt画圆可以代替指示灯

    在QT编程环境中,我们经常需要实现各种用户界面(UI)元素来增强应用的交互性和视觉效果。"Qt画圆可以代替指示灯"这个标题揭示了一个巧妙的方法,即利用QT库的功能来绘制圆形图形,以此模拟指示灯的效果。这种方式...

    Qt窗体间传递数据的三种模型

    本文将深入探讨Qt窗体间传递数据的三种主要模型:信号与槽机制、全局变量和属性绑定。 一、信号与槽机制 Qt的核心特性之一就是信号与槽机制,它是多线程和异步编程的基础。当一个对象的某个状态改变时,它可以发射...

    QT多线程处理+全局变量处理异步事件并获取多个线程返回的结果

    QT多线程处理+全局变量处理异步事件并获取多个线程返回的结果

    基于Qt环境下开发的日志log打印

    1.把log.h 和 log.cpp放到程序里进去 2.log_open("./XXX.log") [这一步会自动新建到这个路径下的txt,会输入到这个文本中] 3.打印输出日志log_debug(""); [这个是需要是想输出变量值,QString需要转成char*类型] 例如...

    QT调用mfc dll和qt dll

    - 编写源代码,定义接口和实现,确保遵循DLL接口设计原则,避免使用全局变量和静态初始化。 - 构建项目,生成.dll文件。 2. 创建MFC DLL: - 使用Visual Studio创建一个新的MFC动态库项目。 - 在类视图中添加...

    Qt简易计算器代码.doc

    静态全局变量 `buttontext` 是一个字符数组,用于存储计算器按键的文本信息。该数组包含了计算器所有按键的名称和符号。 3. 构造函数 构造函数 `CWidget(QWidget *parent, char *name)` 是计算器的构造函数,用于...

    QT qt-opensource-linux-x64-5.7.1.zip

    4. **配置环境变量**:安装完成后,为了能够在终端中全局使用QT的相关命令,需要更新`PATH`环境变量。打开或创建`~/.bashrc`文件,并添加以下行: ``` export PATH=$PATH:/path/to/your/qt/installation/bin ``` ...

    Qt开发环境下载和安装文档

    此外,你还可以设置Qt的全局环境变量,使得在命令行中可以直接使用qmake等工具。 4. 安装过程:点击“下一步”开始安装,这个过程可能需要几分钟到几十分钟不等,取决于你的网络速度和计算机性能。 5. 完成安装:...

    qt+script脚本编程

    1. **Qt Script基础**:理解Qt Script的基础语法,如变量声明、数据类型、控制流结构、函数定义等,这与标准的JavaScript语法基本一致,但有一些Qt特有的扩展,如全局对象QScriptEngine和QScriptContext。...

    c++(Qt)编码规范.

    - **临时交换目录**:定义为宏形式,如`./temp/`,避免使用固定的目录名,例如`./tmp/`(该目录名在某些Qt for Windows版本中有特殊意义)。 ##### 3. 工程文件命名原则 - **工程文件命名**:工程文件(`.pro`)...

Global site tag (gtag.js) - Google Analytics