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);
相关推荐
娇娇yyyyyy3 小时前
QT编程(15): Qt 按键事件和定时器事件
开发语言·qt
GIS阵地7 小时前
QgsDataSourceUri解析
数据库·c++·qt·开源软件·qgis
载数而行5209 小时前
Qt事件常用类,QLabel的QFrame交互
qt
娇娇yyyyyy10 小时前
QT编程(16): Qt Model
开发语言·qt
qq_4663024511 小时前
vs2022 与Qt版本兼容 带来的警告
c++·qt
娇娇yyyyyy1 天前
QT编程(13): Qt 事件机制eventfilter
开发语言·qt
带娃的IT创业者1 天前
工具状态失踪之谜:EventBus事件漏接与asyncio.Lock并发陷阱双线诊断
qt·websocket·并发控制·eventbus·事件驱动架构·pwa·asyncio.lock
不想看见4041 天前
C++/Qt 代码规范指南
开发语言·qt
li星野1 天前
QT模拟题:QT项目实践与架构设计(120分钟)
开发语言·qt
笑鸿的学习笔记1 天前
qt-C++语法笔记之Qt中的delete ui、ui的本质与Q_OBJECT
c++·笔记·qt