《轉》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>也是可以的,像它這樣做,好像是可以降低各個文件編譯時的關聯度,不會在改動了一下部分類的時候,引發其他大量文件的 重新編譯,在做小工程的時候沒什麼區別,但是做大了,編譯一次需要好幾個小時的時候,這樣做的優勢就顯現出來了