9_23_QT窗口
窗口
- 菜单栏(QMenuBar)
- 代码生成菜单项、设置菜单项快捷键
- QAddSeparator 添加分割线和添加图标 setIcon
- QMenuBar
菜单栏(QMenuBar)
代码生成菜单项、设置菜单项快捷键
#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())
//创建菜单项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是否存在,如果他存在,就获取他的值,再返回,如果不存在,就直接创建一个,然后返回。
//创建菜单栏//QMenuBar* menubar = new QMenuBar();QMenuBar* menubar = this->menuBar(); this->setMenuBar(menubar);