Qt 使用-自定义菜单栏

Qt 学习笔记

使用Qt设计及界面时,常用的两种方式添加菜单,第一使用UI界面添加,第二种 在代码中添加菜单。

本次示例,为加深学习映象,故混合使用

使用UI添加菜单

直接在菜单栏输入:

 注意: 子菜单可能无法输入中文,可在Action Editor 中修改文本与提示信息

使用代码

QMenuBar --菜单栏类:菜单栏类给窗口提供水平菜单栏,此菜单栏占用窗口上方区域,垂直高度不变,水平宽度为窗口宽度,可随窗口大小变化而变化。

QMenu --菜单项,包含各个子菜单。QMenu还可以用来创建弹出菜单

QAction --子菜单,一个子菜单对应一个操作。

 源码:

如果出现以下错误

检查是否有菜单项没有初始化

如:我的pMenuTest1 没有初始化

 源码:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    //菜单栏
    QMenuBar *pMenuBar;
    //菜单项
    QMenu *pMenuTest;

    //子菜单
    QAction *pActionTest;
    QAction *pActionTest1;

public slots:
    void openFileWindow();

private:
    Ui::MainWindow *ui;   
};
#endif // MAINWINDOW_H

mainwindow.cpp

 我使用utf-8 可能存在乱码现象,使用

QStringLiteral("中文") 解决
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>

#define USE_DEFAULT_MENU_BAR "use_default_menu_bar"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //指定菜单栏
#ifdef USE_DEFAULT_MENU_BAR
    //添加菜单栏(此处添加为的为QMainWindow自带的菜单)
    pMenuBar = this->menuBar();
#else
    //添加自定义菜单
    pMenuBar = new QMenuBar(this);
#endif
    //定义菜单项
    //(&n)代表快捷方式,当窗口获得焦点时按alt+n即可打开“测试”菜单项
    pMenuTest = new QMenu(QStringLiteral("构建(&D)"),this);

    //定义子菜单
    //(&s)为子菜单快捷键,当打开该菜单项后,按下‘s’键即可响应
    pActionTest = new QAction(QStringLiteral("构建所有项目(&S)"),this);
    //新建一个带图标的菜单项,图标使用资源文件中的资源
    pActionTest1 = new QAction(QIcon(":/new/prefix1/resource/soccer_ball.ico"),QStringLiteral("执行QMark"),this);
    //将菜单项添加到子菜单
    pMenuTest->addAction(pActionTest);
    pMenuTest->addAction(pActionTest1);
    //在菜单项之间添加分割线
    pMenuTest->addSeparator();

    //将子菜单添加到菜单栏
    pMenuBar->addMenu(pMenuTest);

#ifndef USE_DEFAULT_MENU_BAR
    //当不使用QMainWindow自带的菜单栏时,必须要加上此行
    setMenuBar(pMenuBar);
#endif
    //添加菜单响应函数
    connect(ui->actionOpenFileProj,SIGNAL(triggered()), this, SLOT(openFileWindow()));
    connect(pActionTest,&QAction::triggered,this,&MainWindow::openFileWindow);

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::openFileWindow(){
     QString fileName = QFileDialog::getOpenFileName(NULL, QStringLiteral("导入bin文件"),".",QStringLiteral("文本文件(*.bin);;所有文件 (*.*)"));
}

 

 运行效果:

 点击打开项目

参考:

Qt基础之菜单栏 - kyzc - 博客园 

 

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. 创建MDI主窗口 在Qt Creator中创建一个新的Qt Widgets应用程序项目,选择“Main Window”模板。然后,将mainwindow.ui文件中的QWidget更改为QMdiArea,并将其设置为MainWindow的中心窗口。 2. 制作菜单栏Qt Creator的设计模式下,可以从左侧的Widgets栏中拖动QMenuBar控件到MainWindow的顶部。然后,在属性编辑器中,单击“编辑动作”按钮以打开菜单编辑器。在此处,您可以添加菜单和子菜单,以及与它们相关联的动作。 3. 制作工具栏 在Qt Creator的设计模式下,可以从左侧的Widgets栏中拖动QToolBar控件到MainWindow的顶部。然后,您可以从属性编辑器中添加动作,或者单击“编辑动作”按钮以打开动作编辑器,并在其中添加动作。 4. 将动作与菜单和工具栏相关联 在动作编辑器中,您可以将动作与菜单和工具栏相关联。例如,您可以将一个动作添加到文件菜单中,并将其命名为“打开”,然后将其添加到工具栏中。这样,用户可以通过单击菜单项或工具栏按钮来执行相同的操作。 5. 在代码中处理动作 在mainwindow.cpp文件中,将动作与其槽函数相关联。例如,如果您将“打开”动作添加到菜单和工具栏中,则可以将其槽函数实现为打开文件对话框,并将所选文件加载到QMdiArea中的子窗口中。 这些步骤可以帮助您创建一个具有菜单栏和工具栏的MDI主窗口,并将其动作与代码相关联。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值