《轉》QT_BEGIN_NAMESPACE、QT_END_NAMESPACE 等問題

《轉》QT_BEGIN_NAMESPACE、QT_END_NAMESPACE 等問題


《轉》QT_BEGIN_NAMESPACE、QT_END_NAMESPACE 等問題
2010-09-10 10:07:18
標籤:BEGIN NAMESPACE 休閒 END 職場
http://www.qtcn.org/bbs/read.php?tid=14065


#ifndef WINDOW_H
#define WINDOW_H


#include <QSystemTrayIcon>
#include <QDialog>


QT_BEGIN_NAMESPACE
class QAction;
class QCheckBox;
class QComboBox;
class QGroupBox;
class QLabel;
class QLineEdit;
class QMenu;
class QPushButton;
class QSpinBox;
class QTextEdit;
QT_END_NAMESPACE


//! [0]
class Window : public QDialog
{
Q_OBJECT


public:
Window();
……





問題:
1、QT_BEGIN_NAMESPACE、QT_END_NAMESPACE作用是什麼
2、這樣引入類有什麼好處
3、爲什麼這兩個類要通過include引入
#include <QSystemTrayIcon>
#include <QDialog>


1、It is possible to compile whole Qt inside a user-defined namespace. 
See configure options for more details. These macros expand as:


Qt Code:
# define QT_BEGIN_NAMESPACE namespace QT_NAMESPACE {
# define QT_END_NAMESPACE } 
參考資料:
http://www.qtcentre.org/threads/15946-What-s-effect-of-QT_BEGIN_NAMESPACE-Thanks


2、3
在頭文件中儘量引入較少的其它頭文件,可以加快編譯速度;


要include QSystemTrayIcon是因爲在
void iconActivated(QSystemTrayIcon::ActivationReason reason);
這個函數申明的時候需要QSystemTrayIcon類下的變量,其他的用
class QAction;
class QCheckBox;
...
是因爲在頭文件裏面只有這些類的指針申明,並沒有真正實例化,在這個頭文件對應的cpp文件裏面應該會
#include <QAction>
#include <QCheckBox>
...
在cpp文件裏面纔會正真實例化這些類。
其 實直接在頭文件裏面#include <QAction> #include <QCheckBox>也是可以的,像它這樣做,好像是可以降低各個文件編譯時的關聯度,不會在改動了一下部分類的時候,引發其他大量文件的 重新編譯,在做小工程的時候沒什麼區別,但是做大了,編譯一次需要好幾個小時的時候,這樣做的優勢就顯現出來了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章