Qt 关于QT_BEGIN_NAMESPACE宏的作用

admin 2022年9月19日00:41:21评论75 views字数 1133阅读3分46秒阅读模式
最近注意到QT_BEGIN_NAMESPACE宏,具体如下:
#ifndef PREVIEWWINDOW_H#define PREVIEWWINDOW_H
#include
QT_BEGIN_NAMESPACEclass QTextBrowser;QT_END_NAMESPACE
class PreviewWindow : public QWidget{ Q_OBJECTpublic: PreviewWindow(QWidget *parent = 0); void setTexts(QString s,bool b);
protected: void moveEvent ( QMoveEvent * event );
private: QTextBrowser *t;};#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的预编译头文件,会另起章节解说,并附测试结果。
 
常见的三种包含类的方式
#define PREVIEWWINDOW_H
#include
#if 0// 方式一:#include #endif
#if 0// 方式二: 比方式一可轻微提升编译速度class QTextBrowser;#endif
#if 1// 方式三: 编译速度与方式二一样,该宏用于自编译qt源码是否启动命令空间的补充QT_BEGIN_NAMESPACEclass QTextBrowser;QT_END_NAMESPACE
#endif
class PreviewWindow : public QMainWindow{ Q_OBJECTpublic: explicit PreviewWindow(QWidget *parent = 0);
signals:
public slots:
};
#endif // PREVIEWWINDOW_H


Qt 关于QT_BEGIN_NAMESPACE宏的作用


原文始发于微信公众号(汇编语言):Qt 关于QT_BEGIN_NAMESPACE宏的作用

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年9月19日00:41:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Qt 关于QT_BEGIN_NAMESPACE宏的作用http://cn-sec.com/archives/1302944.html

发表评论

匿名网友 填写信息