多文档编辑器--(3)菜单项的功能

在前面两节中,实现了界面的设计(菜单项)和子窗口类的实现,下一步就是实现菜单项的功能,就是把菜单项和子窗口类的成员函数关联起来。

1. 项目文件

在这里插入图片描述

2. mainwindow.h 头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include "mdichild.h"

#include <QMainWindow>
#include <QMdiSubWindow>
#include <QSignalMapper>

class QSignalMapper;

namespace Ui {
   
class MainWindow;
}

class MainWindow : public QMainWindow
{
   
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    MdiChild* createMdiChild();              		// 创建子窗口
    void setActiveSubWindow(QWidget* window);       // 设置活动子窗口
    void updateMenus();                     		// 更新菜单
    void updateWindowMenu();						// 更新“窗口”菜单
    
    void on_actionNew_triggered();					// New 槽函数
    void on_actionOpen_triggered();					// open 槽函数
    void on_actionSave_triggered();					// save 槽函数
    void on_actionUndo_triggered();					// undo 槽函数
    void on_actionClose_triggered();				// close 槽函数
    void on_actionAbout_triggered();				// about 槽函数
    void on_actionAboutQt_triggered();				// AboutQt 槽函数
    void on_actionExit_triggered();					// exit 槽函数
    void on_actionSaveAs_triggered();				// saveAs 槽函数

private:
    Ui::MainWindow *ui;

    QAction* actionSeparator;             			// 间隔器, 窗口菜单下的
    MdiChild* activeMdiChild();           			// 返回一个活动窗口的指针,没有窗口时,返回0
    QMdiSubWindow* findMdiChild(const QString& fileName);       // 查找子窗口

    QSignalMapper* windowMapper;

    void readSettings();                			// 读取窗口设置
    void writeSettings();               			// 写入窗口设置

protected:
    void closeEvent(QCloseEvent* event);                  // 关闭事件
};
#endif // MAINWINDOW_H

可以看出,mainwindow中成员函数大多都是槽函数,槽函数中除了菜单项的槽函数外,还有一些槽函数来响应子窗口的变化,例如,当主窗口中没子窗口时,save, saveAs,close等菜单项是不可用的。没选中一些文字时,cut copy 是不可用的。还有如下图所示,在窗口菜单中显示打开子窗口的文件列表。
在这里插入图片描述

3.mainwindow.cpp 源文件

(1)构造函数
在构造函数中先把私有成员变量 actionSeparator 设置为间隔器,这个间隔器就是在“窗口”菜单中的
“Prev(V)”下面的间隔器。

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
   
    ui->setupUi(this);
    
    actionSeparator = new QAction(this);                // 创建action
    actionSeparator->setSeparator(true);                // 把这一 action 设置为 分隔器
    
    updateMenus();                                      // 更新菜单,该关的菜单项给关闭了
    connect
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值