最近注意到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宏的作用相关推荐

  1. 【Android NDK 开发】JNI 方法解析 ( JNIEXPORT 与 JNICALL 宏定义作用 )

    文章目录 I . JNIEXPORT 与 JNICALL 宏定义 II . JNIEXPORT 与 JNICALL 宏定义说明 ( Windows 平台 ) III . JNIEXPORT 与 JNI ...

  2. 空的宏定义作用及常见用法

    空的宏定义作用及常见用法 我们学习宏定义的第一个概念是,宏定义作为替换作用. 例如: #define SIZE 32 // 接下来代码使用SIZE就相当于32 宏定义是编译器在编译时,将程序中所有SI ...

  3. Linux字符设备驱动中container_of宏的作用

    Linux字符设备驱动中container_of宏的作用 首先看看这个宏的原型: container_of(ptr,type,member) 功能:根据一个结构体变量中的一个成员变量的指针来获取指向整 ...

  4. 为什么Qt会有 QT_BEGIN_NAMESPACE宏

    为什么会有QT_BEGIN_NAMESPACE宏 QT_BEGIN_NAMESPACE就是一个宏,以前Qt4是没有命名空间的,后来才加上去,编译Qt源码时会有选项,是否将这些类放到专用的Qt命名空间内 ...

  5. 《编码规范和测试方法——C/C++版》作业 ·003——宏定义作用整理、设计删除数组元素的函数

    文章目录 一.宏定义(#define)的作用 1.普通宏 2.带参宏 [注]:特殊用法 3.其他用法和注意点 二.实际问题(函数设计) 1.原题 2.题解参考 (1).面向过程的设计 (2).面向对象 ...

  6. C++ DISALLOW_COPY_AND_ASSIGN宏的作用

    有时候,进行类体设计时,会发现某个类的对象是独一无二的,没有完全相同的对象,也就是对该类对象做副本没有任何意义. 因此,需要限制编译器自动生动的拷贝构造函数和赋值构造函数.一般参用下面的宏定义的方式进 ...

  7. LINUX C编程中_REENTRANT宏的作用

    在一个多线程程序里,默认情况下,只有一个errno变量供所有的线程共享.在一个线程准备获取刚才的错误代码时,该变量很容易被另一个线程中的函数调用所改变.类似的问题还存在于fputs之类的函数中,这些函 ...

  8. c语言宏替换作用,C语言中,宏替换的替换规则

    简单来说:宏定义又称为宏代换.宏替换,简称"宏".是C提供的三种预处理功能的其中一种.复杂的请看下面,讲的很全. 下面的带参宏定义,多行宏定义,在Linux内核源码中很多.另外si ...

  9. Cocos2d-x中常用宏的作用

    1. CC_SYNTHESIZE(int, nTest, Test); 相当于: protected: int nTest; public: virtual nTest getTest(void) c ...

最新文章

  1. java 彩票系统_JAVA版彩票随机生成系统
  2. Python3 元组tuple
  3. Ubuntu更新源问题终于解决了
  4. 【日常分享1】三步,有效去除网页广告,完美过滤视频广告
  5. 电感器在交流电路中的作用
  6. Java教程 实战学习Struts实例
  7. field module的on input和on request区别
  8. Spring+Hibernate+c3p0连接池配置-连接无法释放的问题解决方案
  9. 精通 RPM 之查询篇
  10. 「Python基础知识」Python字符串是什么,如何使用
  11. c++学习笔记(12) 需要对对象做拷贝时(深拷贝,浅拷贝),如何重载赋值运算符
  12. python tkinter linux,用于Python和Tkinter的Linux上的字体管理
  13. python 100题_python 100题
  14. android开发我的新浪微博客户端系列教程
  15. django 博客一
  16. 三星android10电话拦截功能,三星手机阻止来电怎么设置 拒接骚扰电话教程 - Iefans...
  17. metaRTC5.0实现webrtc的TURN支持
  18. UEFI开发与调试---ImageHandle和ControllerHandle
  19. STM32状态机编程----什么是状态机?
  20. 正则表达式数字、字母、中文、符号

热门文章

  1. 5线DBCD股票趋势
  2. 消息服务MNS和消息队列ONS产品对比
  3. UE网络-官方联网和多人游戏
  4. AC日记 - - - 30(为了相同的前缀-跳楼梯)
  5. Ubuntu22.04编译Android切换Python2.7版本
  6. 美国日期字符解析Fri, 02-Jan-2020 00:00:00 GMT0400
  7. 2021高考成绩查询镇远一中,离太阳由近到远的八大行星排序及记忆方法
  8. 实现窗口动漫人物眼睛跟随鼠标滚动
  9. R语言初级教程(04): 算术运算
  10. 使用HTML+CSS动画属性让鼠标放在图片上让图片动起来