QT5.9 界面中实现菜单栏

在QT dialog界面中想实现菜单栏
一. 基础:
QMenuBar:就是所有窗口的菜单栏,在此基础上添加不同的QMenu和QAction
QMenu:菜单栏里面菜单,可以显示文本和图标,但是并不负责执行操作,有点类似label的作用
QAction: Qt 将用户与界面进行交互的元素抽象为一种“动作”,使用QAction类表示。QAction才是真正负责执行操作的部件。
继承关系:
QMenuBar、QMenu:QWidget
QAction:QObject
二:实现方法 在dialog界面中实现菜单栏需要代码去实现。
新建一个dialog UI 界面。
在.CPP中添加如下代码

#include "dialog.h"
#include "ui_dialog.h"
#include  <QMenu>
#include <QMenuBar>
#include <QStatusBar>
#include <QDebug>

#include <QDebug>
#include <QAction>
#include <QPushButton>
#include <QCursor>
#include <QKeySequence>

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
       ui->setupUi(this);
       dialog_menu[0] = new QMenu("文件");
       dialog_menu[0]->addAction("编辑");
       dialog_menu[0]->addAction("查看");
       dialog_menu[0]->addAction("工具");

       dialog_act[0] = new QAction("新建",this);
       dialog_act[0]->setShortcut(Qt::CTRL | Qt::Key_A );
       dialog_act[0]->setStatusTip("这是一个新建菜单");

       dialog_act[1] = new QAction("打开",this);
       dialog_act[1]->setCheckable(true);

       dialog_menu[1] = new QMenu("保存");
       dialog_menu[1]->addAction(dialog_act[0]);
       dialog_menu[1]->addAction(dialog_act[1]);

       dialog_menu[2] = new QMenu("打印");
       dialog_menu[2]->addAction("打印设置");
       dialog_menu[2]->addMenu(dialog_menu[1]);

       dialog_menuBar = new QMenuBar(this);
       dialog_menuBar->addMenu(dialog_menu[0]);
       dialog_menuBar->addMenu(dialog_menu[2]);
       dialog_menuBar->setGeometry(0,0,this->width(),30);
       qDebug()<<"新建菜单被按下";
    
     connect(dialog_act[1] ,SIGNAL(triggered()),this,SLOT(slotOpen()));
    // connect(dialog_act[0], &QAction::triggered,this,SLOT(trigerMenu(QAction*)));


}

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

void Dialog::trigerMenu(QAction* act)
{    qDebug()<<"新建菜单被按下";
    if(act->text() == "新建")
     {
      qDebug()<<"新建菜单被按下";
     }
}

void Dialog::slotOpen()
{
   qDebug() << "Open file is:" ;
   ui->label->setText("打开按键被按下");
}

.H文件中添加如下代码

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QMenu>
#include <QMenuBar>
#include <QStatusBar>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();
    QMenu* dialog_menu[10];
    QAction* dialog_act[10];
    QMenuBar* dialog_menuBar ;
    QStatusBar* dialog_status ;

private:
    Ui::Dialog *ui;

public slots:
    void trigerMenu(QAction* act);
    void slotOpen();


};

#endif // DIALOG_H

运行 效果如下
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七 六 伍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值