thinkphp手機(jī)網(wǎng)站模板百度貼吧官網(wǎng)
文章目錄
- QMenuBar
- 示例演示
- 給菜單欄設(shè)置快捷鍵
- 給菜單項設(shè)置快捷鍵
- 添加子菜單
- 添加分割線
- 添加圖標(biāo)
QMenuBar
Qt中采用QMenuBar
來創(chuàng)建菜單欄,一個主窗口,只允許有一個菜單欄,位于主窗口的頂部、主窗口標(biāo)題欄下面;一個菜單欄里面有多個菜單QMenu
;菜單里面有菜單項QAction
QAction
不僅僅在菜單里使用,還在工具欄里使用,工具欄的本質(zhì),就是菜單中一些選項的“快捷方式”
示例演示
創(chuàng)建一個餐單欄,添加菜單,給菜單添加菜單項
創(chuàng)建工程的時候選擇的是QMainWindow
了,因為要創(chuàng)建窗口
ui
界面:
這里有一個Bug,就是在ui界面設(shè)置菜單項的時候,中文無法輸入(可以通過復(fù)制粘貼),這有點麻煩
代碼創(chuàng)建:
關(guān)于QMenuBar的創(chuàng)建方式:
QMenuBar* menuBar = new QMenuBar(); this->setMenuBar(menuBar);
如果在創(chuàng)建項目的時候,沒有勾選自動創(chuàng)建
ui
文件,上述代碼沒問題;如果勾選了自動生成
ui
文件,就會造成內(nèi)存泄漏,因為我們這個操作會代替舊的menubar
,舊的沒有釋放。QMenuBar* menuBar = this->menuBar(); this->setMenuBar(menuBar);
QMenuBar* menuBar = this->menuBar();
表示如果QMenuBar()
存在,則直接獲取;如果不存在,就創(chuàng)建一個新的再返回
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QtDebug>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//創(chuàng)建菜單欄//QMenuBar* menuBar = new QMenuBar();QMenuBar* menuBar = this->menuBar();this->setMenuBar(menuBar); //添加到對象樹//創(chuàng)建菜單QMenu* menu1 = new QMenu("文件");QMenu* menu2 = new QMenu("編輯");QMenu* menu3 = new QMenu("構(gòu)建");menuBar->addMenu(menu1);menuBar->addMenu(menu2);menuBar->addMenu(menu3);//添加菜單項QAction* action1 = new QAction("新建");QAction* action2 = new QAction("打開");QAction* action3 = new QAction("關(guān)閉");menu1->addAction(action1);menu1->addAction(action2);menu1->addAction(action3);//添加信號槽connect(action1, &QAction::trigger, this, &MainWindow::handle);connect(action3, &QAction::trigger, this, &MainWindow::close);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::handle()
{qDebug() << "觸發(fā)新建操作";
}
菜單項被點擊的時候,會觸發(fā)一個信號
triggered
,可以設(shè)置對應(yīng)的槽函數(shù),來響應(yīng)操作
給菜單欄設(shè)置快捷鍵
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//QMenuBar* menuBar = new QMenuBar();QMenuBar* menuBar = this->menuBar();this->setMenuBar(menuBar);QMenu* menu1 = new QMenu("文件(&F)");QMenu* menu2 = new QMenu("編輯(&E)");QMenu* menu3 = new QMenu("構(gòu)建(&B)");QMenu* menu4 = new QMenu("調(diào)試(&D)");menuBar->addMenu(menu1);menuBar->addMenu(menu2);menuBar->addMenu(menu3);menuBar->addMenu(menu4);QAction* action1 = new QAction("新建");QAction* action2 = new QAction("撤銷");QAction* action3 = new QAction("構(gòu)建項目");QAction* action4 = new QAction("開始調(diào)試");menu1->addAction(action1);menu2->addAction(action2);menu3->addAction(action3);menu4->addAction(action4);
}MainWindow::~MainWindow()
{delete ui;
}
這里構(gòu)建的時候直接加上
& 鍵位
即可,然后就可以通過alt + 鍵位
觸發(fā)和給QLabel設(shè)置伙伴類似
給菜單項設(shè)置快捷鍵
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//QMenuBar* menuBar = new QMenuBar();QMenuBar* menuBar = this->menuBar();this->setMenuBar(menuBar);QMenu* menu1 = new QMenu("文件(&F)");QMenu* menu2 = new QMenu("編輯(&E)");menuBar->addMenu(menu1);menuBar->addMenu(menu2);QAction* action1 = new QAction("新建(&N)");QAction* action2 = new QAction("打開(&O)");QAction* action3 = new QAction("撤銷(&Z)");menu1->addAction(action1);menu1->addAction(action2);menu2->addAction(action3);connect(action1, &QAction::triggered, this, &MainWindow::handle1);connect(action2, &QAction::triggered, this, &MainWindow::handle2);connect(action3, &QAction::triggered, this, &MainWindow::handle3);}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::handle1()
{qDebug() << "新建";
}void MainWindow::handle2()
{qDebug() << "打開";
}void MainWindow::handle3()
{qDebug() << "撤銷";
}
添加子菜單
QMenu
也提供了addMenu
,給菜單項添加子菜單
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//QMenuBar* menuBar = new QMenuBar();QMenuBar* menuBar = this->menuBar();this->setMenuBar(menuBar);QMenu* menu1 = new QMenu("父菜單");QMenu* menu1_1 = new QMenu("子菜單");menuBar->addMenu(menu1);menu1->addMenu(menu1_1);QAction* action1 = new QAction("菜單項1");QAction* action2 = new QAction("菜單項2");menu1_1->addAction(action1);menu1_1->addAction(action2);
}MainWindow::~MainWindow()
{delete ui;
}
添加分割線
如果菜單項特別多,可以通過`add分割線進(jìn)行分組,讓用戶看的更清楚
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//QMenuBar* menuBar = new QMenuBar();QMenuBar* menuBar = this->menuBar();this->setMenuBar(menuBar);QMenu* menu1 = new QMenu("菜單1");QMenu* menu2 = new QMenu("菜單2");QMenu* menu3 = new QMenu("菜單3");menuBar->addMenu(menu1);menuBar->addMenu(menu2);menuBar->addMenu(menu3);QAction* action1 = new QAction("菜單項1");QAction* action2 = new QAction("菜單項2");QAction* action3 = new QAction("菜單項3");QAction* action4 = new QAction("菜單項4");menu1->addAction(action1);menu1->addAction(action2);menu1->addSeparator(); //添加分割線menu1->addAction(action3);menu1->addSeparator();menu1->addAction(action4);}MainWindow::~MainWindow()
{delete ui;
}
添加圖標(biāo)
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//QMenuBar* menuBar = new QMenuBar();QMenuBar* menuBar = this->menuBar();this->setMenuBar(menuBar);QMenu* menu1 = new QMenu("菜單1");QMenu* menu2 = new QMenu("菜單2");QMenu* menu3 = new QMenu("菜單3");menuBar->addMenu(menu1);menuBar->addMenu(menu2);menuBar->addMenu(menu3);QAction* action1 = new QAction("kun");action1->setIcon(QIcon(":/ikun.png"));QAction* action2 = new QAction("籃球");action2->setIcon(QIcon(":/ikun2.png"));menu1->addAction(action1);menu1->addAction(action2);}MainWindow::~MainWindow()
{delete ui;
}
通過qrc
機(jī)制導(dǎo)入圖像,然后再進(jìn)行設(shè)置
給
QMenu
設(shè)置圖標(biāo):
- 如果是長在
QMenuBar
上文字就沒有了,直接顯示圖標(biāo)- 如果是子菜單,都顯示