窗口
- 菜单栏(QMenuBar)
-
- 代码生成菜单项、设置菜单项快捷键
- [QAddSeparator 添加分割线和添加图标 setIcon](#QAddSeparator 添加分割线和添加图标 setIcon)
- QMenuBar
菜单栏(QMenuBar)
代码生成菜单项、设置菜单项快捷键
cpp
#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();
this->setMenuBar(menubar);
//创建菜单、设置快捷键
QMenu* menu1 = new QMenu("文件(&W)");
QMenu* menu2 = new QMenu("视图(&B)");
QMenu* menu3 = new QMenu("帮助(&C)");
QMenu* menu4 = new QMenu("开始(&D)");
menubar->addMenu(menu1);
menubar->addMenu(menu2);
menubar->addMenu(menu3);
menubar->addMenu(menu4);
//创建菜单项、设置快捷键
QAction* action1 = new QAction("打开(&e)");
QAction* action2 = new QAction("存储(&f)");
QAction* action3 = new QAction("设置(&g)");
QAction* action4 = new QAction("更改(&H)");
QAction* action5 = new QAction("退出(&Q)");
menu1->addAction(action1);
menu1->addAction(action2);
menu1->addAction(action3);
menu1->addAction(action4);
menu1->addAction(action5);
connect(action1, &QAction::triggered, this, &MainWindow::handle);
connect(action5, &QAction::triggered, this, &MainWindow::close);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::handle()
{
qDebug() << "打开";
}
QAddSeparator 添加分割线和添加图标 setIcon
• 在两个菜单项之间田间分割线,可以使用 addSeparator()
• 给某个菜单项添加图标,可以使用 setIcon(QIcon())
cpp
//创建菜单项
QAction* action1 = new QAction("打开(&e)");
//给action1添加图片
action1->setIcon(QIcon(":/open.png"));
QAction* action2 = new QAction("存储(&f)");
QAction* action3 = new QAction("设置(&g)");
QAction* action4 = new QAction("更改(&H)");
QAction* action5 = new QAction("退出(&Q)");
menu1->addAction(action1);
//给action1和action2 中间添加图片
menu1->addSeparator();
menu1->addAction(action2);
menu1->addAction(action3);
menu1->addAction(action4);
menu1->addAction(action5);
connect(action1, &QAction::triggered, this, &MainWindow::handle);
connect(action5, &QAction::triggered, this, &MainWindow::close);
QMenuBar
• 如果没有关闭自动生成ui文件,那么ui.可能就会自动生成一个QMenuBar,这个时候如果我们用代码再生成一个QMenuBar,就会导致前一个QMenuBar被挤出对象树,这个时候如果频繁切换页面就会导致内存泄漏。
解决方法就是用代码创建QMenuBar之前,先判断QMenuBar是否存在,如果他存在,就获取他的值,再返回,如果不存在,就直接创建一个,然后返回。
cpp
//创建菜单栏
//QMenuBar* menubar = new QMenuBar();
QMenuBar* menubar = this->menuBar();
this->setMenuBar(menubar);