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);
相关推荐
机器视觉知识推荐、就业指导5 小时前
Qt:真正的门槛不是入门,而是维护
开发语言·qt
米优6 小时前
qgis电子地图二次开发---比例尺
qt·qgis
雾岛听蓝10 小时前
Qt操作指南:状态栏、浮动窗口与对话框使用
开发语言·经验分享·笔记·qt
楚Y6同学12 小时前
QT C++之保存界面设置为配置文件
c++·qt·保存配置
Ulyanov12 小时前
《PySide6 GUI开发指南:QML核心与实践》 第十篇:综合实战——构建完整的跨平台个人管理应用
开发语言·python·qt·ui·交互·qml·雷达电子战系统仿真
-凌凌漆-13 小时前
【QML】QQmlEngine::setObjectOwnership()的作用
qt
Ulyanov15 小时前
《PySide6 GUI开发指南:QML核心与实践》 第八篇:性能优化大师——QML应用性能调优实战
python·qt·ui·性能优化·qml·系统仿真
小短腿的代码世界17 小时前
Qwt性能优化与源码级深度解析:工业级图表控件的极限性能调优
开发语言·qt·信息可视化·性能优化
-凌凌漆-17 小时前
【Qt】qt延时
开发语言·qt
楚Y6同学18 小时前
QT之下拉框自动填充功能
开发语言·c++·qt·qt开发技巧·串口下拉填充·网口下拉填充