QMenuBar

71 篇文章 4 订阅

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值