zoukankan      html  css  js  c++  java
  • Qt 关于QT_BEGIN_NAMESPACE宏的作用

    最近注意到QT_BEGIN_NAMESPACE宏,具体如下:

     1 #ifndef PREVIEWWINDOW_H
     2 #define PREVIEWWINDOW_H
     3  
     4 #include <QWidget>
     5  
     6 QT_BEGIN_NAMESPACE
     7 class QTextBrowser;
     8 QT_END_NAMESPACE
     9  
    10 class PreviewWindow : public QWidget
    11 {
    12     Q_OBJECT
    13 public:
    14     PreviewWindow(QWidget *parent = 0);
    15     void setTexts(QString s,bool b);
    16  
    17 protected:
    18     void moveEvent ( QMoveEvent * event );
    19  
    20 private:
    21     QTextBrowser *t;
    22 };
    23 #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的预编译头文件,会另起章节解说,并附测试结果。

     

    常见的三种包含类的方式

     1 #define PREVIEWWINDOW_H
     2  
     3 #include <QMainWindow>
     4  
     5 #if 0
     6 // 方式一:
     7 #include <QTextBrowser>
     8 #endif
     9  
    10 #if 0
    11 // 方式二:    比方式一可轻微提升编译速度
    12 class QTextBrowser;
    13 #endif
    14  
    15 #if 1
    16 // 方式三:    编译速度与方式二一样,该宏用于自编译qt源码是否启动命令空间的补充
    17 QT_BEGIN_NAMESPACE
    18 class QTextBrowser;
    19 QT_END_NAMESPACE
    20  
    21 #endif
    22  
    23 class PreviewWindow : public QMainWindow
    24 {
    25     Q_OBJECT
    26 public:
    27     explicit PreviewWindow(QWidget *parent = 0);
    28  
    29 signals:
    30  
    31 public slots:
    32  
    33 };
    34  
    35 #endif // PREVIEWWINDOW_H
  • 相关阅读:
    JSON.parse()和JSON.stringify()(转载)
    Bootstrap 栅格系统(转载)
    基于Java的WebSocket推送【转载】
    VirtualBox中的虚拟机要如何设置,才能够上网
    String类和StringBuffer类的区别
    split命令参数及用法详解
    linux du小练习
    内部类(innerclasses)、匿名对象
    构造器、方法的重载、方法的重写
    继承、封装、多态、抽象、接口
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/12857879.html
Copyright © 2011-2022 走看看