本篇介紹Qt選單欄相關操作,分為三部分:1.選單欄相關的類介紹;2.系統選單的生成和回應;3.彈出選單的生成和回應;選單欄通常只有以QMainWindow為基類的程式中才用到,以QWidget為基類的程式通常沒有選單欄,
1. 選單相關類
QMenuBar --選單欄類,即下圖中紅色區域標記,選單欄類給視窗提供水平選單欄,此選單欄占用視窗上方區域,垂直高度不變,水平寬度為視窗寬度,可隨視窗大小變化而變化,如下圖中“測驗”,“test1”,"test2"所在的欄幾位QMenuBar
QMenu --選單項,即下圖中綠色區域,下圖中“測驗”,"test1","test2"都是一個獨立的選單,包含各個子選單,QMenu還可以用來創建彈出選單,
QAction --子選單,即下圖中藍色區域標記的內容,一個子選單對應一個操作,
2.系統選單的生成和回應
2.1.使用代碼添加系統選單
示例原始碼:
.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_NAMESPACE 10 11 class MainWindow : public QMainWindow 12 { 13 Q_OBJECT 14 15 public: 16 MainWindow(QWidget *parent = nullptr); 17 ~MainWindow(); 18 19 //選單欄 20 QMenuBar *pMenuBar; 21 //選單項 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 //選單回應函式 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_BAR 16 //添加選單欄(此處添加為的為QMainWindow自帶的選單) 17 pMenuBar = this->menuBar(); 18 #else 19 //添加自定義選單 20 pMenuBar = new QMenuBar(this); 21 #endif 22 23 //定義選單項 24 //(&n)代表快捷方式,當視窗獲得焦點時按alt+n即可打開“測驗”選單項 25 pMenuTest = new QMenu("測驗(&n)",this); 26 pMenuTest1 = new QMenu("test1",this); 27 pMenuTest2 = new QMenu("test2",this); 28 29 //定義子選單 30 //(&s)為子選單快捷鍵,當打開該選單項后,按下‘s’鍵即可回應 31 pActionTest = new QAction("測驗(&s)",this); 32 //新建一個帶圖示的選單項,圖示使用資源檔案中的資源 33 pActionTest1 = new QAction(QIcon(":/new/prefix1/resource/soccer_ball.ico"),"測驗1",this); 34 pActionTest2 = new QAction("測驗2",this); 35 pActionTest3 = new QAction("測驗3(&Y)",this); 36 pActionTest4 = new QAction("測驗4",this); 37 pActionTest5 = new QAction("測驗5(&M)",this); 38 pActionTest6 = new QAction("測驗6",this); 39 40 //將選單項添加到子選單 41 pMenuTest->addAction(pActionTest); 42 pMenuTest->addAction(pActionTest1); 43 //在選單項之間添加分割線 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_BAR 59 //當不使用QMainWindow自帶的選單欄時,必須要加上此行 60 setMenuBar(pMenuBar); 61 #endif 62 63 //添加選單回應函式 64 connect(pActionTest,&QAction::triggered,this,&MainWindow::OnActionTest); 65 connect(pActionTest1,&QAction::triggered,this,&MainWindow::OnActionTest); 66 } 67 68 69 //選單回應函式 70 void MainWindow::OnActionTest() 71 { 72 QDialog dlg; 73 dlg.setWindowTitle("測驗選單回應"); 74 dlg.exec(); 75 } 76 77 void MainWindow::OnActionTest1() 78 { 79 80 QDialog dlg; 81 dlg.setWindowTitle("測驗選單回應"); 82 dlg.exec(); 83 } 84 85 MainWindow::~MainWindow() 86 { 87 delete ui; 88 }
上面的代碼中定義了兩種創建系統選單的方式:呼叫QMainWindow自帶的選單欄和自己新建選單欄,由第6行定義的宏控制,顯示效果相同,
第25行為“測驗”子選單添加快捷鍵,當視窗獲得焦點時按alt+n可展開“測驗”子選單,
第31行為“測驗”子選單“測驗”選單項添加快捷鍵,當“測驗”子選單彈出后按‘s’鍵,程式即可做出回應,
第33行為“測驗”子選單的“測驗2”選單項添加了圖示,
第44行為“測驗”子選單的“測驗2”和“測驗3”之間添加了分割線,
2.2.使用UI設計器設計系統選單
進入“設計”頁面,進入如下圖所示的界面,具體操作方法見如下兩張圖,注意:輸入選單名稱后一定要按“Enter”鍵才能生效,


轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/212037.html
標籤:Windows
上一篇:超低功耗MCU如何降低功耗
