实现思路 :
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());//显示的位置 紧跟鼠标
}