一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 578万

最近注意到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
复制代码

 

posted on   一杯清酒邀明月  阅读(1878)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示