QT:头部菜单栏和右击菜单事件

 

实现思路 :

1>每一个小的选项都是一个action(项),一个menu(菜单)可以盛放很多action,一个菜单栏(QMenuBar)可以盛放很多menu   
2>把以上的嵌套起来就组合成了头部菜单栏(一般只能设置一个)    

3>menu可以添加menu 也就是说菜单可以套娃   

 
 

                                   

 在头文件声明一下(下面会实现此方法)

void contextMenuEvent(QContextMenuEvent *event);//接受控件的菜单事件
/*
*   1-头部菜单栏 Action加入到menu  menu加入到menubar(菜单栏一般只有一个) 主窗体main自带menuBar 正好利用指针指向,(当然也可以创建一个新的最后setmenubar进去)
*   2-右击出现菜单栏
*       1> contextMenuEvent 重写菜单事件
*       2> menu1->popup(event->globalPos());//在鼠标光标下打开菜单栏,获取当前鼠标的位置 实时跟进显示
*/
#include "menubar.h"
#include <QAction>
#include <QMenu>
#include <QMenuBar>
#include <QMessageBox>
#include <QContextMenuEvent>
menubar::menubar(QWidget *parent) : QMainWindow(parent)
{
    QAction* dakai_action=new QAction("打开");
    QAction* close_action=new QAction("退出");
    QAction* guanyu_action=new QAction("关于");
    connect(dakai_action,&QAction::triggered,[=](){
        QMessageBox::question(this,"标题1","内容1");
    });
    connect(close_action,SIGNAL(triggered(bool)),this,SLOT(close()));
    connect(guanyu_action,&QAction::triggered,[=](){
        QMessageBox::information(this,"关于","这里是八的八\r\n八月八的");
    });
    QList<QAction*> list_action;
    list_action<<dakai_action<<close_action;
    QMenu* menu=new QMenu("文件(&F)");
    menu->addActions(list_action);
    QMenu* menu1=new QMenu("帮助(&h)");
    menu1->addAction(guanyu_action);
    //如果窗体的父类是QWidget 需要设置一个布局将QMenuBar 放到布局中,在吧布局设置到QWidget
    QMenuBar* menubar=menuBar();//menuBar() 主窗口自带的返回菜单栏的方法**
    menubar->addMenu(menu);     //要是不用也可以new出来自己 在set设置
    menubar->addMenu(menu1);
}

void menubar::contextMenuEvent(QContextMenuEvent *event)//接受控件的菜单事件
{
    QAction* dakai_action=new QAction("打开");
    QAction* close_action=new QAction("退出");
    QAction* guanyu_action=new QAction("关于");
    connect(dakai_action,&QAction::triggered,[=](){
        QMessageBox::question(this,"标题1","内容1");
    });
    connect(close_action,SIGNAL(triggered(bool)),this,SLOT(close()));
    connect(guanyu_action,&QAction::triggered,[=](){
        QMessageBox::information(this,"关于","这里是八戒的八\r\n八月八的花");
    });
    QMenu* menu1=new QMenu();
    menu1->addAction(dakai_action);
    menu1->addAction(close_action);
    menu1->addAction(guanyu_action);

    QMenu* menu2=new QMenu("子菜单");//加入同菜单即可
    menu2->addAction(guanyu_action);
    menu1->addMenu(menu2);

    menu1->popup(event->globalPos());//显示的位置  紧跟鼠标
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值