Qt 使用-自定义菜单栏
Qt 学习笔记
使用Qt设计及界面时,常用的两种方式添加菜单,第一使用UI界面添加,第二种 在代码中添加菜单。
本次示例,为加深学习映象,故混合使用
使用UI添加菜单
直接在菜单栏输入:
注意: 子菜单可能无法输入中文,可在Action Editor 中修改文本与提示信息
使用代码
QMenuBar --菜单栏类:菜单栏类给窗口提供水平菜单栏,此菜单栏占用窗口上方区域,垂直高度不变,水平宽度为窗口宽度,可随窗口大小变化而变化。
QMenu --菜单项,包含各个子菜单。QMenu还可以用来创建弹出菜单。
QAction --子菜单,一个子菜单对应一个操作。
源码:
如果出现以下错误
检查是否有菜单项没有初始化
如:我的pMenuTest1 没有初始化
源码:
mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); //菜单栏 QMenuBar *pMenuBar; //菜单项 QMenu *pMenuTest; //子菜单 QAction *pActionTest; QAction *pActionTest1; public slots: void openFileWindow(); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H
mainwindow.cpp
我使用utf-8 可能存在乱码现象,使用
QStringLiteral("中文") 解决
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QFileDialog> #define USE_DEFAULT_MENU_BAR "use_default_menu_bar" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); //指定菜单栏 #ifdef USE_DEFAULT_MENU_BAR //添加菜单栏(此处添加为的为QMainWindow自带的菜单) pMenuBar = this->menuBar(); #else //添加自定义菜单 pMenuBar = new QMenuBar(this); #endif //定义菜单项 //(&n)代表快捷方式,当窗口获得焦点时按alt+n即可打开“测试”菜单项 pMenuTest = new QMenu(QStringLiteral("构建(&D)"),this); //定义子菜单 //(&s)为子菜单快捷键,当打开该菜单项后,按下‘s’键即可响应 pActionTest = new QAction(QStringLiteral("构建所有项目(&S)"),this); //新建一个带图标的菜单项,图标使用资源文件中的资源 pActionTest1 = new QAction(QIcon(":/new/prefix1/resource/soccer_ball.ico"),QStringLiteral("执行QMark"),this); //将菜单项添加到子菜单 pMenuTest->addAction(pActionTest); pMenuTest->addAction(pActionTest1); //在菜单项之间添加分割线 pMenuTest->addSeparator(); //将子菜单添加到菜单栏 pMenuBar->addMenu(pMenuTest); #ifndef USE_DEFAULT_MENU_BAR //当不使用QMainWindow自带的菜单栏时,必须要加上此行 setMenuBar(pMenuBar); #endif //添加菜单响应函数 connect(ui->actionOpenFileProj,SIGNAL(triggered()), this, SLOT(openFileWindow())); connect(pActionTest,&QAction::triggered,this,&MainWindow::openFileWindow); } MainWindow::~MainWindow() { delete ui; } void MainWindow::openFileWindow(){ QString fileName = QFileDialog::getOpenFileName(NULL, QStringLiteral("导入bin文件"),".",QStringLiteral("文本文件(*.bin);;所有文件 (*.*)")); }
运行效果:
点击打开项目
参考: