zoukankan      html  css  js  c++  java
  • Qt5:在窗口上创建菜单栏

     1 //mainwindow.h
     2 #ifndef MAINWINDOW_H
     3 #define MAINWINDOW_H
     4 
     5 #include <QMainWindow>
     6 class    Action;//所用到的类的前置声明
     7 class    MenuBar;
     8 class    QMenu;
     9 class    QWidget;
    10 
    11 class    MainWindow : public QMainWindow
    12 {
    13     Q_OBJECT
    14 public:
    15     MainWindow(QWidget* parent = 0);
    16 private:
    17     void    createMenuBar();
    18 private:
    19     MenuBar        *menu;
    20     QMenu          *fileMenu,
    21                 *editMenu,
    22                 *helpMenu;
    23 };
    24 
    25 class    MenuBar:public QWidget{
    26     Q_OBJECT
    27 public:
    28     MenuBar(QWidget* parent);
    29     ~MenuBar();
    30 public    slots:
    31     void    ignore();
    32 public:
    33     //Menu  "File"
    34     QMenu     *fileMenu;
    35     QAction    *newAction,
    36             *openAction,
    37             *closeAction;
    38     //Menu    "Edit"
    39     QMenu      *editMenu;
    40     QAction    *cutAction,
    41              *copyAction,
    42             *pasteAction;
    43     //Menu    "Help"
    44     QMenu     *helpMenu;
    45     QAction    *aboutAction,
    46             *aboutQtAction;
    47 };
    48 #endif // MAINWINDOW_H
     1 #include "mainwindow.h"
     2 #include<QWidget>
     3 #include<QMenu>
     4 #include<QMenuBar>
     5 #include<QAction>
     6 
     7 MainWindow::MainWindow(QWidget *parent) :
     8     QMainWindow(parent)
     9 {
    10     this->setWindowTitle(tr("Main Window"));
    11     this->createMenuBar();
    12 }
    13 
    14 void    MainWindow::createMenuBar()
    15 {
    16     menu = new MenuBar(this);
    17     menuBar()->addMenu(menu->fileMenu);
    18     menuBar()->addMenu(menu->editMenu);
    19     menuBar()->addMenu(menu->helpMenu);
    20 }
    21 
    22 //======================================================
    23 MenuBar::MenuBar(QWidget* parent)
    24 {
    25     fileMenu    = new QMenu(QObject::tr("File"),parent);
    26     newAction    = new QAction(QObject::tr("New"),parent);
    27     openAction    = new QAction(QObject::tr("Open"),parent);
    28     closeAction    = new QAction(QObject::tr("Close"),parent);
    29     fileMenu->addAction(newAction);
    30     fileMenu->addAction(openAction);
    31     fileMenu->addAction(closeAction);
    32 
    33     editMenu    = new QMenu(QObject::tr("Edit"),parent);
    34     cutAction    = new QAction(QObject::tr("Cut"),parent);
    35     copyAction    = new QAction(QObject::tr("Copy"),parent);
    36     pasteAction    = new QAction(QObject::tr("Paste"),parent);
    37     editMenu->addAction(cutAction);
    38     editMenu->addAction(copyAction);
    39     editMenu->addAction(pasteAction);
    40 
    41     helpMenu    = new QMenu(QObject::tr("Help"),parent);
    42     aboutAction    = new QAction(QObject::tr("About"),parent);
    43     aboutQtAction    = new QAction(QObject::tr("About Qt"),parent);
    44     helpMenu->addAction(aboutAction);
    45     helpMenu->addAction(aboutQtAction);
    46 }
    47 
    48 void    MenuBar::ignore()
    49 {}
    50 MenuBar::~MenuBar()
    51 {
    52     delete    newAction;
    53     delete    openAction;
    54     delete    closeAction;
    55     delete    cutAction;
    56     delete    copyAction;
    57     delete    pasteAction;
    58     delete    aboutAction;
    59     delete    aboutQtAction;
    60     newAction    = 0;
    61     openAction    = 0;
    62     closeAction    = 0;
    63     cutAction    = 0;
    64     copyAction    = 0;
    65     pasteAction    = 0;
    66     aboutAction    = 0;
    67     aboutQtAction    = 0;
    68 }

    上述代码就是为一个窗口创建菜单的代码

    首先是 实例化一个 MainWindow 窗口类的对象 , 在该类的构造函数中 , 又实例化了一个  MenuBar 类的 对象 ,

    从代码中可以看出  MenuBar类的主要最用  就是创建 菜单栏上的菜单项 和  每个菜单向所包含的子菜单项 ,

    以及 每个子菜单项所对应的 action , 并通过 addAction 动作 , 将 每个子菜单项 添加到 主菜单项 上

    菜单项 和 其子菜单项 都创建好了 并且关联到了一起 , 接下来就是将其都添加到菜单栏上了。

    接着MainWindow的构造函数 调用 createMenuBar() 成员 函数。

    该函数的作用就是创建一个菜单栏 ,并将菜单项添加到菜单栏上

      基本过程是   先调用  menuBar()   该函数在程序中第一次被调用的时候会为窗口创建一个菜单栏 ,并返回指向该菜单栏的指针,

      然后就可以通过  QMenu*   QMenuBar::addMenu() ;  函数来将每个子菜单项添加到菜单栏上了。 当程序运行的时候,菜单栏就会在窗口上显示出来

    当想创建多级菜单的时候, 如  File->Open->aaa->bbb->.....这样的菜单的时候 , 只要使用相应菜单项的指针来调用  addMenu() 成员函数即可 ,

    这样就会创建多级菜单

    注:  当调用  menuBar()->addMenu(const QString & menuItem)  而不是 menuBar()->addMenu(QMenu *)   的时候 , 菜单栏会自动创建一个  名为 menuItem

      的菜单项并返回指向该菜单项的指针

  • 相关阅读:
    BZOJ 2038 小Z的袜子 莫队算法
    POJ 3407 球面距离
    POJ 1375 圆的切线
    BZOJ 1502 月下柠檬树 simpson积分
    UVA 11704
    POJ 1981 定长圆覆盖最多点
    HDU 3982 半平面交+圆和凸多边形面积并
    ZOJ 1104 二分
    使用Singleton来实现Flash和Flex的通信。
    校内API相关
  • 原文地址:https://www.cnblogs.com/wowk/p/3117820.html
Copyright © 2011-2022 走看看