最近注意到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
对于QT_BEGIN_NAMESPACE宏的作用
QT_BEGIN_NAMESPACE其实就是个宏,以前Qt4是没有命令空间的,后来才加上的,编译Qt源码时会有选项,是否将这些类放到专用的Qt命令空间内,默认是没有的。这就出来问题了,为了统一,如果你的代码在默认没有Qt命令空间的SDK中编译,那你就不用在前面加上命令空间,反之则需要。
为了屏蔽上面这个差异,使得你的代码能在这两种情况下都进行编译,Qt就提供了QT_BEGIN_NAMESPACE宏,这样开发者就省的自己来用程序或宏进行处理了。
至于说该宏提升编译速度什么的,那是上述类的声明的作用,与Qt无关的(也即与该宏QT_BEGIN_NAMESPACE无关),若要大幅提升编译速度需要开启qt的预编译头文件,会另起章节解说,并附测试结果。
CSDNqt大纲: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
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓