菜单栏QMenu QAction,每一行代码都有注释

该文介绍如何在Qt环境中创建多级菜单,并通过信号与槽机制实现在点击菜单项时执行特定功能。首先,通过QMenuBar和QMenu类创建一级、二级甚至三级菜单,然后通过connect函数将菜单项与槽函数关联,当点击菜单项时触发相应的功能,如串口控制、电机控制等。
摘要由CSDN通过智能技术生成

目标:能在顶部显示多级菜单,并实现点击实现自己的功能

目录

第一部分:展示一二三到n级菜单

第二部分:实现点击执行对应功能(信号与槽)

第三部分:一个触发的简单例子


第一部分:

展示一二三到n级菜单

// 到时候你在要用的地方调用这个方法(函数)就行
void MainUI::m_initMenu() 
{
    QMenuBar* menuBar = new QMenuBar(this);// 定义QMenuBar菜单栏,你得有篮子才能放东西
    menuBar->resize(width(), menuBar->height());// 这一行自行屏蔽看效果,我很难说,效果很明显的
    //一级菜单
    QMenu* menu1 = menuBar->addMenu(QStringLiteral("更多操作"));//图片中的一二三级菜单的显示
    QMenu* menu2 = menuBar->addMenu(QStringLiteral("菜单2"));// 你加多少个就有多少个
    QMenu* menu3 = menuBar->addMenu(QStringLiteral("菜单3"));


    //二级菜单
    menu1->addAction(QStringLiteral("串口"));// addAction就是添加子菜单
    menu1->addAction(QStringLiteral("电机控制"));
    menu1->addAction(QStringLiteral("开发中..."));


    //三级菜单
    QMenu* m = menu1->addMenu(QStringLiteral("二级菜单4"));// addMenu就是再添加一个菜单栏,
    m->addAction(QStringLiteral("三级菜单1"));// 到时候好放子菜单
    m->addAction(QStringLiteral("三级菜单2"));// 这里再次使用了QMenu,不理解可以看面结合理解

}

第二部分

实现点击执行对应功能(信号与槽)

// 我是模块化思想的,到时候你在要用的地方调用这个方法(函数)就行
void MainUI::m_initMenu() 
{
    QMenuBar* menuBar = new QMenuBar(this);
    menuBar->resize(width(), menuBar->height());
    //一级菜单
    QMenu* menu1 = menuBar->addMenu(QStringLiteral("更多操作"));
    QMenu* menu2 = menuBar->addMenu(QStringLiteral("菜单2"));
    QMenu* menu3 = menuBar->addMenu(QStringLiteral("菜单3"));

    //二级菜单 (对比第一部分看)
    menu1->addAction(QStringLiteral("串口"));
    menu1->addAction(QStringLiteral("电机控制"));
    menu1->addAction(QStringLiteral("开发中..."));

    //三级菜单
    QMenu* m = menu1->addMenu(QStringLiteral("二级菜单4"));
    m->addAction(QStringLiteral("三级菜单1"));
    m->addAction(QStringLiteral("三级菜单2"));

    //设置信号与槽实现:点击二级菜单,触发相应类方法
    //只要你点击串口,电机控制和开发中,会触发相应功能
    //为什么只有一个connect?因为只要是menu1的内容会自动识别,第三部分说说到
    connect(menu1, &QMenu::triggered, this, slot_action_triggered);// 后面会写个例子给你看


}

第三部分

一个触发的简单例子

// 当你点击的是“串口”那么action返回的字符串就是串口,自己设置好做自己的功能就行
void MainUI::slot_action_triggered(QAction *action)
{
    if(action->text() == "串口")
    {
        qDebug() << QStringLiteral("串口");
    }
    else if(action->text() == "电机控制")
    {
        qDebug() << QStringLiteral("电机控制");
    }
    else if(action->text() == "开发中...")
    {
        qDebug() << QStringLiteral("开发中...");
    }
    else if(action->text() == "三级菜单1")
    {
        qDebug() << QStringLiteral("三级菜单1");
    }
    else if(action->text() == "三级菜单2")
    {
        qDebug() << QStringLiteral("三级菜单2");
    }


}

尾巴:如果有不会的可以留言,每一遍新文章都是两个月内7*24小时回复。后续会更新更多关于QT 的知识,因为本人也刚在学习,欢迎交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值