目标:能在顶部显示多级菜单,并实现点击实现自己的功能
目录
第一部分:展示一二三到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 的知识,因为本人也刚在学习,欢迎交流