Qt 使用-自定义菜单栏

Qt 学习笔记

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

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

使用UI添加菜单

直接在菜单栏输入:

Qt 使用-自定义菜单栏_第1张图片

 注意: 子菜单可能无法输入中文,可在Action Editor 中修改文本与提示信息Qt 使用-自定义菜单栏_第2张图片

使用代码

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

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

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

Qt 使用-自定义菜单栏_第3张图片

 源码:

如果出现以下错误

Qt 使用-自定义菜单栏_第4张图片

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

如:我的pMenuTest1 没有初始化

Qt 使用-自定义菜单栏_第5张图片

 源码:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 

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 

#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 使用-自定义菜单栏_第6张图片

 运行效果:

Qt 使用-自定义菜单栏_第7张图片

 点击打开项目Qt 使用-自定义菜单栏_第8张图片

参考:

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

 

你可能感兴趣的:(C++,qt5,c++)