原创 QT第五站 创建主窗口之子类化QMainWindow(1)

2011-1-26 01:01 6481 6 6 分类: MCU/ 嵌入式

在设计可视化程序的时候往往是要有一个核心的框架来实现功能。

下面实现一个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。(左上角图标)

 

 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条