关于QT_BEGIN_NAMESPACE宏的作用
最近注意到QT_BEGIN_NAMESPACE宏,具体如下:
#ifndef PREVIEWWINDOW_H
#define PREVIEWWINDOW_H#include <QWidget>QT_BEGIN_NAMESPACE
class QTextBrowser;
QT_END_NAMESPACEclass PreviewWindow : public QWidget
{Q_OBJECT
public:PreviewWindow(QWidget *parent = 0);void setTexts(QString s,bool b);protected:void moveEvent ( QMoveEvent * event );private:QTextBrowser *t;
};
#endif
在其cpp文件中使用了QTextBrowser类,qtcreator的点的代码提示也没有出来(还是因为没有包括#include<QTextWidget>)
对于QT_BEGIN_NAMESPACE宏的作用
QT_BEGIN_NAMESPACE其实就是个宏,以前Qt4是没有命令空间的,后来才加上的,编译Qt源码时会有选项,是否将这些类放到专用的Qt命令空间内,默认是没有的。这就出来问题了,为了统一,如果你的代码在默认没有Qt命令空间的SDK中编译,那你就不用在前面加上命令空间,反之则需要。
为了屏蔽上面这个差异,使得你的代码能在这两种情况下都进行编译,Qt就提供了QT_BEGIN_NAMESPACE宏,这样开发者就省的自己来用程序或宏进行处理了。
至于说该宏提升编译速度什么的,那是上述类的声明的作用,与Qt无关的(也即与该宏QT_BEGIN_NAMESPACE无关),若要大幅提升编译速度需要开启qt的预编译头文件,会另起章节解说,并附测试结果。
常见的三种包含类的方式
#ifndef PREVIEWWINDOW_H
#define PREVIEWWINDOW_H#include <QMainWindow>#if 0
// 方式一:
#include <QTextBrowser>
#endif#if 0
// 方式二: 比方式一可轻微提升编译速度
class QTextBrowser;
#endif#if 1
// 方式三: 编译速度与方式二一样,该宏用于自编译qt源码是否启动命令空间的补充
QT_BEGIN_NAMESPACE
class QTextBrowser;
QT_END_NAMESPACE#endifclass PreviewWindow : public QMainWindow
{Q_OBJECT
public:explicit PreviewWindow(QWidget *parent = 0);signals:public slots:};#endif // PREVIEWWINDOW_H
关于QT_BEGIN_NAMESPACE宏的作用相关推荐
- 【Android NDK 开发】JNI 方法解析 ( JNIEXPORT 与 JNICALL 宏定义作用 )
文章目录 I . JNIEXPORT 与 JNICALL 宏定义 II . JNIEXPORT 与 JNICALL 宏定义说明 ( Windows 平台 ) III . JNIEXPORT 与 JNI ...
- 空的宏定义作用及常见用法
空的宏定义作用及常见用法 我们学习宏定义的第一个概念是,宏定义作为替换作用. 例如: #define SIZE 32 // 接下来代码使用SIZE就相当于32 宏定义是编译器在编译时,将程序中所有SI ...
- Linux字符设备驱动中container_of宏的作用
Linux字符设备驱动中container_of宏的作用 首先看看这个宏的原型: container_of(ptr,type,member) 功能:根据一个结构体变量中的一个成员变量的指针来获取指向整 ...
- 为什么Qt会有 QT_BEGIN_NAMESPACE宏
为什么会有QT_BEGIN_NAMESPACE宏 QT_BEGIN_NAMESPACE就是一个宏,以前Qt4是没有命名空间的,后来才加上去,编译Qt源码时会有选项,是否将这些类放到专用的Qt命名空间内 ...
- 《编码规范和测试方法——C/C++版》作业 ·003——宏定义作用整理、设计删除数组元素的函数
文章目录 一.宏定义(#define)的作用 1.普通宏 2.带参宏 [注]:特殊用法 3.其他用法和注意点 二.实际问题(函数设计) 1.原题 2.题解参考 (1).面向过程的设计 (2).面向对象 ...
- C++ DISALLOW_COPY_AND_ASSIGN宏的作用
有时候,进行类体设计时,会发现某个类的对象是独一无二的,没有完全相同的对象,也就是对该类对象做副本没有任何意义. 因此,需要限制编译器自动生动的拷贝构造函数和赋值构造函数.一般参用下面的宏定义的方式进 ...
- LINUX C编程中_REENTRANT宏的作用
在一个多线程程序里,默认情况下,只有一个errno变量供所有的线程共享.在一个线程准备获取刚才的错误代码时,该变量很容易被另一个线程中的函数调用所改变.类似的问题还存在于fputs之类的函数中,这些函 ...
- c语言宏替换作用,C语言中,宏替换的替换规则
简单来说:宏定义又称为宏代换.宏替换,简称"宏".是C提供的三种预处理功能的其中一种.复杂的请看下面,讲的很全. 下面的带参宏定义,多行宏定义,在Linux内核源码中很多.另外si ...
- Cocos2d-x中常用宏的作用
1. CC_SYNTHESIZE(int, nTest, Test); 相当于: protected: int nTest; public: virtual nTest getTest(void) c ...
最新文章
- java 彩票系统_JAVA版彩票随机生成系统
- Python3 元组tuple
- Ubuntu更新源问题终于解决了
- 【日常分享1】三步,有效去除网页广告,完美过滤视频广告
- 电感器在交流电路中的作用
- Java教程 实战学习Struts实例
- field module的on input和on request区别
- Spring+Hibernate+c3p0连接池配置-连接无法释放的问题解决方案
- 精通 RPM 之查询篇
- 「Python基础知识」Python字符串是什么,如何使用
- c++学习笔记(12) 需要对对象做拷贝时(深拷贝,浅拷贝),如何重载赋值运算符
- python tkinter linux,用于Python和Tkinter的Linux上的字体管理
- python 100题_python 100题
- android开发我的新浪微博客户端系列教程
- django 博客一
- 三星android10电话拦截功能,三星手机阻止来电怎么设置 拒接骚扰电话教程 - Iefans...
- metaRTC5.0实现webrtc的TURN支持
- UEFI开发与调试---ImageHandle和ControllerHandle
- STM32状态机编程----什么是状态机?
- 正则表达式数字、字母、中文、符号
热门文章
- 5线DBCD股票趋势
- 消息服务MNS和消息队列ONS产品对比
- UE网络-官方联网和多人游戏
- AC日记 - - - 30(为了相同的前缀-跳楼梯)
- Ubuntu22.04编译Android切换Python2.7版本
- 美国日期字符解析Fri, 02-Jan-2020 00:00:00 GMT0400
- 2021高考成绩查询镇远一中,离太阳由近到远的八大行星排序及记忆方法
- 实现窗口动漫人物眼睛跟随鼠标滚动
- R语言初级教程(04): 算术运算
- 使用HTML+CSS动画属性让鼠标放在图片上让图片动起来