|
本篇介紹Qt菜單欄相關(guān)操作,分為三部分:1.菜單欄相關(guān)的類介紹;2.系統(tǒng)菜單的生成和響應(yīng);3.彈出菜單的生成和響應(yīng);菜單欄通常只有以QMainWindow為基類的程序中才用到,以QWidget為基類的程序通常沒(méi)有菜單欄。 1. 菜單相關(guān)類QMenuBar --菜單欄類,即下圖中紅色區(qū)域標(biāo)記,菜單欄類給窗口提供水平菜單欄,此菜單欄占用窗口上方區(qū)域,垂直高度不變,水平寬度為窗口寬度,可隨窗口大小變化而變化。如下圖中“測(cè)試”,“test1”,"test2"所在的欄幾位QMenuBar QMenu --菜單項(xiàng),即下圖中綠色區(qū)域,下圖中“測(cè)試”,"test1","test2"都是一個(gè)獨(dú)立的菜單,包含各個(gè)子菜單。QMenu還可以用來(lái)創(chuàng)建彈出菜單。 QAction --子菜單,即下圖中藍(lán)色區(qū)域標(biāo)記的內(nèi)容,一個(gè)子菜單對(duì)應(yīng)一個(gè)操作。
2.系統(tǒng)菜單的生成和響應(yīng)2.1.使用代碼添加系統(tǒng)菜單示例源碼: .h文件 1 #ifndef MAINWINDOW_H 2 #define MAINWINDOW_H 3 4 #include <QMainWindow> 5 #include <QMenuBar> 6 7 QT_BEGIN_NAMESPACE 8 namespace Ui { class MainWindow; } 9 QT_END_NAMESPACE10 11 class MainWindow : public QMainWindow12 {13 Q_OBJECT14 15 public:16 MainWindow(QWidget *parent = nullptr);17 ~MainWindow();18 19 //菜單欄20 QMenuBar *pMenuBar;21 //菜單項(xiàng)22 QMenu *pMenuTest;23 QMenu *pMenuTest1;24 QMenu *pMenuTest2;25 //子菜單26 QAction *pActionTest;27 QAction *pActionTest1;28 QAction *pActionTest2;29 QAction *pActionTest3;30 QAction *pActionTest4;31 QAction *pActionTest5;32 QAction *pActionTest6;33 34 public slots:35 //菜單響應(yīng)函數(shù)36 void OnActionTest();37 void OnActionTest1();38 39 private:40 Ui::MainWindow *ui;41 };42 #endif // MAINWINDOW_H.cpp文件 1 #include "mainwindow.h" 2 #include "ui_mainwindow.h" 3 #include <QDialog> 4 5 //是否啟用QMainWindow自帶的菜單欄 6 //#define USE_DEFAULT_MENU_BAR 7 8 MainWindow::MainWindow(QWidget *parent) 9 : QMainWindow(parent)10 , ui(new Ui::MainWindow)11 {12 ui->setupUi(this);13 14 //指定菜單欄15 #ifdef USE_DEFAULT_MENU_BAR16 //添加菜單欄(此處添加為的為QMainWindow自帶的菜單)17 pMenuBar = this->menuBar();18 #else19 //添加自定義菜單20 pMenuBar = new QMenuBar(this);21 #endif22 23 //定義菜單項(xiàng)24 //(&n)代表快捷方式,當(dāng)窗口獲得焦點(diǎn)時(shí)按alt+n即可打開(kāi)“測(cè)試”菜單項(xiàng)25 pMenuTest = new QMenu("測(cè)試(&n)",this);26 pMenuTest1 = new QMenu("test1",this);27 pMenuTest2 = new QMenu("test2",this);28 29 //定義子菜單30 //(&s)為子菜單快捷鍵,當(dāng)打開(kāi)該菜單項(xiàng)后,按下's’鍵即可響應(yīng)31 pActionTest = new QAction("測(cè)試(&s)",this);32 //新建一個(gè)帶圖標(biāo)的菜單項(xiàng),圖標(biāo)使用資源文件中的資源33 pActionTest1 = new QAction(QIcon(":/new/prefix1/resource/soccer_ball.ico"),"測(cè)試1",this);34 pActionTest2 = new QAction("測(cè)試2",this);35 pActionTest3 = new QAction("測(cè)試3(&Y)",this);36 pActionTest4 = new QAction("測(cè)試4",this);37 pActionTest5 = new QAction("測(cè)試5(&M)",this);38 pActionTest6 = new QAction("測(cè)試6",this);39 40 //將菜單項(xiàng)添加到子菜單41 pMenuTest->addAction(pActionTest);42 pMenuTest->addAction(pActionTest1);43 //在菜單項(xiàng)之間添加分割線44 pMenuTest->addSeparator();45 pMenuTest->addAction(pActionTest2);46 47 pMenuTest1->addAction(pActionTest3);48 pMenuTest1->addAction(pActionTest4);49 50 pMenuTest2->addAction(pActionTest5);51 pMenuTest2->addAction(pActionTest6);52 53 //將子菜單添加到菜單欄54 pMenuBar->addMenu(pMenuTest);55 pMenuBar->addMenu(pMenuTest1);56 pMenuBar->addMenu(pMenuTest2);57 58 #ifndef USE_DEFAULT_MENU_BAR59 //當(dāng)不使用QMainWindow自帶的菜單欄時(shí),必須要加上此行60 setMenuBar(pMenuBar);61 #endif62 63 //添加菜單響應(yīng)函數(shù)64 connect(pActionTest,&QAction::triggered,this,&MainWindow::OnActionTest);65 connect(pActionTest1,&QAction::triggered,this,&MainWindow::OnActionTest);66 }67 68 69 //菜單響應(yīng)函數(shù)70 void MainWindow::OnActionTest()71 {72 QDialog dlg;73 dlg.setWindowTitle("測(cè)試菜單響應(yīng)");74 dlg.exec();75 }76 77 void MainWindow::OnActionTest1()78 {79 80 QDialog dlg;81 dlg.setWindowTitle("測(cè)試菜單響應(yīng)");82 dlg.exec();83 }84 85 MainWindow::~MainWindow()86 {87 delete ui;88 }上面的代碼中定義了兩種創(chuàng)建系統(tǒng)菜單的方式:調(diào)用QMainWindow自帶的菜單欄和自己新建菜單欄,由第6行定義的宏控制,顯示效果相同。 第25行為“測(cè)試”子菜單添加快捷鍵,當(dāng)窗口獲得焦點(diǎn)時(shí)按alt+n可展開(kāi)“測(cè)試”子菜單。 第31行為“測(cè)試”子菜單“測(cè)試”菜單項(xiàng)添加快捷鍵,當(dāng)“測(cè)試”子菜單彈出后按's’鍵,程序即可做出響應(yīng)。 第33行為“測(cè)試”子菜單的“測(cè)試2”菜單項(xiàng)添加了圖標(biāo)。 第44行為“測(cè)試”子菜單的“測(cè)試2”和“測(cè)試3”之間添加了分割線。 2.2.使用UI設(shè)計(jì)器設(shè)計(jì)系統(tǒng)菜單進(jìn)入“設(shè)計(jì)”頁(yè)面,進(jìn)入如下圖所示的界面,具體操作方法見(jiàn)如下兩張圖,注意:輸入菜單名稱后一定要按“Enter”鍵才能生效。
|
|
|