发现一篇对qt初学者非常有帮助对好文,http://blog.csdn.net/qter_wd007/article/details/5406295
本实例实现一个基本的主窗口程序,包含一个菜单条、一个工具栏、中央可编辑窗体及状态栏。
主窗口头文件代码如下:
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3 #include <QMainWindow>
4 class QAction;
5 class QMenu;
6 class QToolBar;
7 class QTextEdit;
8 class MainWindow : public QMainWindow
9 {
10 Q_OBJECT
11 public:
12 MainWindow();
13 void createMenus();
14 void createActions();
15 void createToolBars();
16 void createStatusBar();
17 public slots:
18 void slotNewFile();
19 void slotOpenFile();
20 void slotSaveFile();
21 void slotCopy();
22 void slotCut();
23 void slotPaste();
24 void slotAbout();
25 private:
26 QTextCodec *codec;
27 QMenu *menuFile;
28 QMenu *menuEdit;
29 QMenu *menuAbout;
30 QToolBar *toolBarFile;
31 QToolBar *toolBarEdit;
32 QAction *actionOpenFile;
33 QAction *actionNewFile;
34 QAction *actionSaveFile;
35 QAction *actionExit;
36 QAction *actionCopy;
37 QAction *actionCut;
38 QAction *actionPaste;
39 QAction *actionAboutQt;
40 QTextEdit * text;
41 };
42 #endif // MAINWINDOW_H
第1和第2句定义头文件包含卫哨,目的是防止重复包含头文件,这两句与结尾的第42句结合在一起使用才是完整的。
第3句包含了QMainWindow的定义,它是主窗口类的基类。
第4至第7句对程序下文中可能用到的类进行前置声明(forward declaration)。它们会告诉编译器,我们用到的这些类已经存在了,并且不需要知道这些类的完整定义。我们为什么要这样做,而不是将它们的头文件包含进来呢?这主要是由于在程序下文中,我们只是简单的定义了指向这些类的对象的指针,而并没有涉及到该类的其他方面。
这样做的好处,一是避免了头文件被其他文件多次包含,尤其是在头文件中包含头文件时,容易造成重复包含和产生包含顺序问题,并且增大了文件的体积;二是提高了编译速度,因为编译器只需知道该类已经被定义了,而无需了解定义的细节。
小贴士:尽量不要在头文件中包含另外的头文件
一种好的编程风格是,尽量在头文件中使用类前置声明程序下文中要用到的类,实在需要包含其它的头文件时,可以把它放在我们的类实现文件中。在下面的程序中,你将会看到这个准则的应用。
第8句声明了我们的MainWindow类是派生自QMainWindow。
第10句的Q_OBJECT宏对于所有使用了信号/槽机制的类而言是必需的,同时它要求被放置在类声明的开始处。
第12句声明了我们的主窗口类MainWindow的构造函数。
在第13至第16句中,createActions()函数用于创建程序中用到的动作(Action),createMenus()函数用于创建菜单(Menu),createToolBars()函数用于创建工具栏(ToolBar),CreateStatusBar()函数用于创建状态栏(StatusBar)。接着声明了用到的槽函数,如“新建文件”、“打开文件”等。最后声明了实现主窗口所需的各个元素,包括菜单项、工具条以及各个动作等。
第17至第24行,声明了类的槽,这里我们把它们定义为公有的,并且返回值均为void。需要注意的是,槽同样可以被当做普通函数被调用,这时它的返回值对我们而言与调用一个普通的C++函数产生的返回值并无二致。而当槽作为一个信号的响应函数而被执行时,它的返回值会被程序忽略。也就是说,不使用信号,我们也可以正常调用槽函数来完成一些事情。
第25至第40行,声明了用于实现主窗口所需的各种元素,主要包括菜单项、工具条、状态条以及各种动作等,它们是类的成员变量,通常我们被声明为私有的。