9_23_QT窗口

窗口

菜单栏(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);
相关推荐
abcd_zjq19 分钟前
【2025最新】【win10】vs2026+qt6.9+opencv(cmake编译opencv_contrib拓展模
人工智能·qt·opencv·计算机视觉·visual studio
abcd_zjq44 分钟前
VS2026+QT6.9+opencv图像增强(多帧平均降噪)(CLAHE对比度增强)(边缘增强)(图像超分辨率)
c++·图像处理·qt·opencv·visual studio
Algebraaaaa2 小时前
Qt中的字符串宏 | 编译期检查和运行期检查 | Qt信号与槽connect写法
开发语言·c++·qt
友友马2 小时前
『 QT 』Hello World控件实现指南
开发语言·qt
誰能久伴不乏2 小时前
如何在 Linux_Ubuntu 上安装 Qt 5:详细教程
linux·qt·ubuntu
feiyangqingyun10 小时前
有难度哦/Qt基于通用地图组件实现航迹规划和模拟/动态标注轨迹线/带序号和方向箭头指示
qt·航迹规划和模拟
江公望10 小时前
Qt qmlRegisterSingletonType()函数浅谈
c++·qt
HyEISN10 小时前
关于 Qt 6.10.0 中 FolderListModel 返回 undefined 路径
qt
江公望12 小时前
Qt QtConcurrent使用入门浅解
c++·qt·qml
Larry_Yanan17 小时前
QML学习笔记(三十一)QML的Flow定位器
java·前端·javascript·笔记·qt·学习·ui