在设计可视化程序的时候往往是要有一个核心的框架来实现功能。
下面实现一个Spreadsheet的应用程序。
通过子类化QMainWindow,可以创建应用程序的主窗口。由于QDialog和QMainWindow都派生自QWdiget,所以第2章很多方法都对创建主窗口同样适用。
应用程序的主窗口的源代码分别放在mainwindow.h和mainwindow.cpp
先从头文件说起
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class QAction;
class QLabel;
class FindDialog;
class Spreadsheet;
class MainWindow : public QMainWindow
{
Q_OBJECT //信号与槽必须带
public:
MainWindow(); //子类的定义
protected:
void closeEvent(QCloseEvent *event);
private slots:
void newFile();
void open();
bool save();
bool saveAs();
void find();
void goToCell();
void sort();
void about();
void openRecentFile();
void updateStatusBar();
void spreadsheetModified();
//私有槽
private:
void createActions();
void createMenus();
void createContextMenu();
void createToolBars();
void createStatusBar();
void readSettings();
void writeSettings();
bool okToContinue();
bool loadFile(const QString &fileName);
bool saveFile(const QString &fileName);
void setCurrentFile(const QString &fileName);
void updateRecentFileActions();
QString strippedName(const QString &fullFileName);
//私有函数
Spreadsheet *spreadsheet;
FindDialog *findDialog;
QLabel *locationLabel;
QLabel *formulaLabel;
QStringList recentFiles;
QString curFile;
enum { MaxRecentFiles = 5 };
QAction *recentFileActions[MaxRecentFiles];
QAction *separatorAction;
QMenu *fileMenu;
QMenu *editMenu;
QMenu *selectSubMenu;
QMenu *toolsMenu;
QMenu *optionsMenu;
QMenu *helpMenu;
QToolBar *fileToolBar;
QToolBar *editToolBar;
QAction *newAction;
QAction *openAction;
QAction *saveAction;
QAction *saveAsAction;
QAction *exitAction;
QAction *cutAction;
QAction *copyAction;
QAction *pasteAction;
QAction *deleteAction;
QAction *selectRowAction;
QAction *selectColumnAction;
QAction *selectAllAction;
QAction *findAction;
QAction *goToCellAction;
QAction *recalculateAction;
QAction *sortAction;
QAction *showGridAction;
QAction *autoRecalcAction;
QAction *aboutAction;
QAction *aboutQtAction; //私有变量
};
#endif
我们将MainWindow类定义为QMainWindow的子类。由于类MainWindow提供了自己的信号和槽,所以它包含了Q_OBject宏。
接着定义了一大堆需要用的私有槽和私有函数。私有槽用来响应菜单点击发过来的信号,而私有函数很多的都是实现菜单功能的。
除了他自己的私有槽和私有函数以外,MainWindow类还有很多私有变量。具体再说。
现在进入头文件:我们也要包括第二章所写的文件
#include <QtGui>
#include "finddialog.h"
#include "gotocelldialog.h"
#include "mainwindow.h"
#include "sortdialog.h"
#include "spreadsheet.h"
MainWindow::MainWindow()
{
spreadsheet = new Spreadsheet;
setCentralWidget(spreadsheet); //设置 spreadsheet为中央
createActions();
createMenus();
createContextMenu();
createToolBars();
createStatusBar(); //实现其他主窗口的其他功能,如菜单
readSettings(); //读取这个应用程序的一些设置
findDialog = 0; /铺垫
setWindowIcon(QIcon(":/images/icon.png"));
setCurrentFile(""); //左上角图标
}
在这个构造函数中,先创建一个Spreadsheet窗口部件并且把他设置为这个窗口的中间部件。
其中私有函数用于创建主窗口的其他部分,如菜单之类的。
而最后两句则是把窗口的图标设置为icop.png。(左上角图标)
文章评论(0条评论)
登录后参与讨论