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);
相关推荐
qq_4017004113 小时前
Qt的.pro文件
开发语言·qt
qq_4017004113 小时前
Qt 事件处理机制
java·数据库·qt
秦jh_13 小时前
【Qt】系统相关(下)
开发语言·qt
hqwest13 小时前
码上通QT实战18--监控页面10-获取设备数据
开发语言·qt·湿度·modbus功能码·寄存器地址·从站数据·0103
hqwest14 小时前
码上通QT实战22--趋势页面01-准备图表对象
开发语言·qt·qpainter·qss·painevent·qt绘图事件
hqwest15 小时前
码上通QT实战23--趋势页面02-图表模拟数据
开发语言·qt·qpainter·qt绘图·绘制曲线
一只爱学习的小鱼儿15 小时前
在QT中使用饼状图进行数据分析
开发语言·qt·数据分析
小徐不徐说17 小时前
避坑指南:Qt 中 Lambda 表达式崩溃原因与高效使用实践
数据库·c++·qt·面试
嘿嘿潶黑黑17 小时前
Qt中的Q_PROPERTY宏
开发语言·qt
hqwest19 小时前
码上通QT实战20--监控页面12-获取灯珠状态
qt·modbus·开关量·功能码01·线圈状态