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

  的菜單項並返回指向該菜單項的指針

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM