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);
相关推荐
飞剑神6 小时前
qt svg缺失元素, 原因是不支持 rgba
开发语言·qt
眠りたいです7 小时前
Qt音频播放器项目实践:文件过滤、元数据提取与动态歌词显示实现
c++·qt·ui·音视频·媒体·qt5·mime
奇树谦19 小时前
QT|windwos桌面端应用程序开发,当连接多个显示器的时候,如何获取屏幕编号?
开发语言·qt
Franklin1 天前
Python界面设计【QT-creator基础编程 - 01】如何让不同分辨率图像自动匹配graphicsView的窗口大小
开发语言·python·qt
郝学胜-神的一滴1 天前
深入理解QFlags:Qt中的位标志管理工具
开发语言·c++·qt·程序人生
看到我,请让我去学习1 天前
Qt— 布局综合项目(Splitter,Stacked,Dock)
开发语言·qt
创想未来CTF1 天前
Qt同步处理业务并禁用按钮
qt
谱写秋天1 天前
Qt 5.5 的安装与配置(使用 VSCode编辑)
开发语言·vscode·qt
前端市界2 天前
前端视角: PyQt6+Vue3 跨界开发实战
前端·qt·pyqt
誰能久伴不乏2 天前
Qt 动态属性(Dynamic Property)详解
开发语言·qt