QT菜单
1.QMenuBar
2.QMenu
3.QAction
QMenuBar
1.QMenuBar *m = new QMenuBar(this);
2.QMenu *m1 = m->addMenu(QStringLiteral("菜单1"));
3.QAction *a1 = m1->addAction(QStringLiteral("二级菜单1"));
4.a1->setIcon(QIcon("test.jpg"));
5.connect(a1,SIGNAL(triggered()),this,SLOT(Menu1()));
6.connect(a1,SINGAL(hovered()),this,SLOT(Hover()));
7.QMenu *m2 = m->addMenu(QStringLiteral("菜单2"));
8.connect(m2,SIGNAL(hovered(QAction *)),this,SLOT(Hover(QAction)));
QActionGroup菜单项单选和多选
QAction *a3 = m1->addAction(QStringLiteral(""))
QActionGroup *ag = new QActionGroup(this);
ag->addAction(a1);
ag->addAction(a2);
ag->addAction(a3);
ag->setExclusive(false);
a2->setCheckable(true);
connect(a2,SIGNAL(triggered(bool)),this,SLOT(Check(boo)));
QMenu按钮或者右键菜单
1.menu->exec(QCursor::pos());
ui_mainwindow.h
#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H
#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_MainWindow
{
public:
QAction *actionTest1;
QWidget *centralwidget;
QPushButton *pushButton;
QMenuBar *menubar;
QStatusBar *statusbar;
void setupUi(QMainWindow *MainWindow)
{
if (MainWindow->objectName().isEmpty())
MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
MainWindow->resize(800, 600);
actionTest1 = new QAction(MainWindow);
actionTest1->setObjectName(QString::fromUtf8("actionTest1"));
actionTest1->setCheckable(true);
centralwidget = new QWidget(MainWindow);
centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
pushButton = new QPushButton(centralwidget);
pushButton->setObjectName(QString::fromUtf8("pushButton"));
pushButton->setGeometry(QRect(280, 200, 181, 101));
MainWindow->setCentralWidget(centralwidget);
menubar = new QMenuBar(MainWindow);
menubar->setObjectName(QString::fromUtf8("menubar"));
menubar->setGeometry(QRect(0, 0, 800, 27));
MainWindow->setMenuBar(menubar);
statusbar = new QStatusBar(MainWindow);
statusbar->setObjectName(QString::fromUtf8("statusbar"));
MainWindow->setStatusBar(statusbar);
retranslateUi(MainWindow);
QObject::connect(pushButton, SIGNAL(clicked()), MainWindow, SLOT(Click()));
QMetaObject::connectSlotsByName(MainWindow);
} // setupUi
void retranslateUi(QMainWindow *MainWindow)
{
MainWindow->setWindowTitle(QCoreApplication::translate("MainWindow", "MainWindow", nullptr));
actionTest1->setText(QCoreApplication::translate("MainWindow", "Test1", nullptr));
#if QT_CONFIG(shortcut)
actionTest1->setShortcut(QCoreApplication::translate("MainWindow", "Ctrl+B", nullptr));
#endif // QT_CONFIG(shortcut)
pushButton->setText(QCoreApplication::translate("MainWindow", "PushButton", nullptr));
} // retranslateUi
};
namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMenuBar>
#include <QActionGroup>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//插入菜单栏
QMenuBar *m = new QMenuBar(this);
m->resize(width(),m->height());
//一级菜单
m1 = m->addMenu(QStringLiteral("菜单1"));
//包含所有子结点(子结点的子节点)都触发
connect(m1,&QMenu::triggered,this,&MainWindow::Action);
//connect(m1,qOverload<QAction*>::of(&QMenu::triggered),
// this,qOverload<QAction*>::of(&MainWindow::Action));
//connect(m1,SIGNAL(triggered(QAction*)),
// this,SLOT(Action(QAction*)));
//二级菜单
QAction* a1 = m1->addAction(QStringLiteral("二级菜单1.1"));
//QAction 触发信号
// connect(a1,qOverload<>::of(&QAction::triggered),
// this,qOverload<>::of(&MainWindow::Action1));
connect(a1,SIGNAL(triggered(void)),
this,SLOT(Action1(void)));
//添加快捷键
a1->setShortcut(QString("A"));
// connect(a1,&QAction::triggered,
// this,&MainWindow::Action1);
QAction* a2 = m1->addAction(QStringLiteral("二级菜单1.2"));
//QAction鼠标悬停信号
connect(a2,&QAction::hovered,this,&MainWindow::Hover);
QAction* a3 = m1->addAction(QStringLiteral("二级菜单1.3"));
a3->setIcon(QIcon("test.png"));
a1->setCheckable(true);
a2->setCheckable(true);
a3->setCheckable(true);
QActionGroup *ag = new QActionGroup(this);
//ag->addAction(a1);
ag->addAction(a2);
ag->addAction(a3);
//单选
ag->setExclusive(true);
// //是否选择
// connect(a1,qOverload<bool>::of(&QAction::triggered),
// this,qOverload<bool>::of(&MainWindow::Action1));
connect(a1,SIGNAL(triggered(bool)),
this,SLOT(Action1(bool)));
//三级菜单
QMenu *m14 = m1->addMenu(QStringLiteral("二级菜单1.4"));
m14->addAction(QStringLiteral("三级菜单1.4.1"));
m14->setIcon(QIcon("test.png"));
QMenu *m2 = m->addMenu(QStringLiteral("菜单2"));
m2->addAction(ui->actionTest1);
QMenu *m3 = m->addMenu(QStringLiteral("菜单3"));
}
MainWindow::~MainWindow()
{
delete ui;
}