关于QT_BEGIN_NAMESPACE宏的作用

45 篇文章 12 订阅

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

#ifndef PREVIEWWINDOW_H
#define PREVIEWWINDOW_H

#include <QWidget>

QT_BEGIN_NAMESPACE
class QTextBrowser;
QT_END_NAMESPACE

class 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

#endif

class PreviewWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit PreviewWindow(QWidget *parent = 0);

signals:

public slots:

};

#endif // PREVIEWWINDOW_H

  • 19
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值