• 10554阅读
  • 7回复

QT疑问 NAMESPACE  #include class(已解决) [复制链接]

上一主题 下一主题
离线daimon0316
 
只看楼主 倒序阅读 楼主  发表于: 2009-01-20
— 本帖被 XChinux 执行加亮操作(2009-01-21) —
  1. #ifndef WINDOW_H
  2. #define WINDOW_H
  3. #include <QSystemTrayIcon>
  4. #include <QDialog>
  5. QT_BEGIN_NAMESPACE
  6. class QAction;
  7. class QCheckBox;
  8. class QComboBox;
  9. class QGroupBox;
  10. class QLabel;
  11. class QLineEdit;
  12. class QMenu;
  13. class QPushButton;
  14. class QSpinBox;
  15. class QTextEdit;
  16. QT_END_NAMESPACE
  17. //! [0]
  18. class Window : public QDialog
  19. {
  20.     Q_OBJECT
  21. public:
  22.     Window();
  23.     void setVisible(bool visible);
  24. protected:
  25.     void closeEvent(QCloseEvent *event);
  26. private slots:
  27.     void setIcon(int index);
  28.     void iconActivated(QSystemTrayIcon::ActivationReason reason);
  29.     void showMessage();
  30.     void messageClicked();
  31. private:
  32.     void createIconGroupBox();
  33.     void createMessageGroupBox();
  34.     void createActions();
  35.     void createTrayIcon();
  36.     QGroupBox *iconGroupBox;
  37.     QLabel *iconLabel;
  38.     QComboBox *iconComboBox;
  39.     QCheckBox *showIconCheckBox;
  40.     QGroupBox *messageGroupBox;
  41.     QLabel *typeLabel;
  42.     QLabel *durationLabel;
  43.     QLabel *durationWarningLabel;
  44.     QLabel *titleLabel;
  45.     QLabel *bodyLabel;
  46.     QComboBox *typeComboBox;
  47.     QSpinBox *durationSpinBox;
  48.     QLineEdit *titleEdit;
  49.     QTextEdit *bodyEdit;
  50.     QPushButton *showMessageButton;
  51.     QAction *minimizeAction;
  52.     QAction *maximizeAction;
  53.     QAction *restoreAction;
  54.     QAction *quitAction;
  55.     QSystemTrayIcon *trayIcon;
  56.     QMenu *trayIconMenu;
  57. };
  58. //! [0]
  59. #endif


问题:
1、QT_BEGIN_NAMESPACE、QT_END_NAMESPACE作用是什么
2、这样引入类有什么好处
3、为什么这两个类要通过include引入
  #include <QSystemTrayIcon>
      #include <QDialog>
[ 此贴被daimon0316在2009-01-22 09:14重新编辑 ]
博客地址 http://blog.sina.com.cn/daimon0316
离线daimon0316
只看该作者 1楼 发表于: 2009-01-20
有没有人给讲两句呀,google了半天也没个结果
博客地址 http://blog.sina.com.cn/daimon0316
离线signallock

只看该作者 2楼 发表于: 2009-01-20
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 }


Quoted from:
http://www.qtcentre.org/forum/f-qt-programming-2/t-whats-effect-of-qt-begin-namespace-thanks-15946.html

我感觉那个QT_BEGIN_NAMESPACE 和 QT_END_NAMESPACE没什么用,如果他们是这样展开的话……
通过#include 引入QDialog是因为在Window类里面继承了QDialog,这样的话编译器需要被继承类的完整声明
但是为什么通过#include 引入QSystemTrayIcon,我也不知道……
离线signallock

只看该作者 3楼 发表于: 2009-01-20
嗯,刚才又找了一下,好像定义这两个宏是怕Qt库和其他函数库有名字冲突
根据上面那个老外的说法,要修改宏定义好像要通过给configure追加参数重新编译。

Reference:
http://www.qtcn.org/bbs/read.php?tid=14065
离线mxw5495
只看该作者 4楼 发表于: 2009-01-21
要include QSystemTrayIcon是因为在
void iconActivated(QSystemTrayIcon::ActivationReason reason);
这个函数申明的时候需要QSystemTrayIcon类下的变量,其他的用
class QAction;
class QCheckBox;
...
是因为在头文件里面只有这些类的指针申明,并没有真正实例化,在这个头文件对应的cpp文件里面应该会
#include <QAction>
#include <QCheckBox>
...
在cpp文件里面才会正真实例化这些类。
其实直接在头文件里面#include <QAction> #include <QCheckBox>也是可以的,像它这样做,好像是可以降低各个文件编译时的关联度,不会在改动了一下部分类的时候,引发其他大量文件的重新编译,在做小工程的时候没什么区别,但是做大了,编译一次需要好几个小时的时候,这样做的优势就显现出来了
离线wd007

只看该作者 5楼 发表于: 2009-01-21
在头文件中尽量引入较少的其它头文件,可以加快编译速度,也防止头文件的重复包含问题
欢迎访问我的博客,一起学习提高
http://blog.csdn.net/qter_wd007
离线daimon0316
只看该作者 6楼 发表于: 2009-01-22
受教了,
博客地址 http://blog.sina.com.cn/daimon0316
离线santhtony

只看该作者 7楼 发表于: 2010-01-31
Re:QT疑问 NAMESPACE  #include class(已解决)
cheer
-------------> ------->       http://www.likeqt.com
快速回复
限100 字节
 
上一个 下一个