Qt 实现多级菜单
2017-11-22 15:00
741 查看
前言
在众多知名的软件UI中下拉菜单、按钮菜单、右键菜单、托盘菜单、多级菜单等等是很常见的,就连Windows和linux等系统级的软件也用到这些UI元素。下图就是我们最常见的Windows系统多级菜单:
Qt实现(多级)菜单
在Qt中通过QMenu和QAction就可以实现这些菜单,QMenu就是上图中我们看到的三个级联菜单,每个QMenu里面的小项目就是一个QAction,一个QAction由一个图标和一段文字描述组成。要先右键弹出菜单我们需要重写contextMenuEvent(QContextMenuEvent *event)事件,如果是按钮菜单等关联信号槽,在槽函数弹出菜单即可。源码分析
void Widget::createMenu() { m_menu1 = new QMenu(); m_menu1->addAction("1_1",this,SLOT(actionsSlot())); m_menu1->addAction("1_2",this,SLOT(actionsSlot())); m_menu1->addAction("1_3",this,SLOT(actionsSlot())); QMenu* menu2 = m_menu1->addMenu("2_0"); menu2->addAction("2_1",this,SLOT(actionsSlot())); QMenu* menu3 = menu2->addMenu("3_0"); menu2->addSeparator(); menu3->addAction("3_1",this,SLOT(actionsSlot())); menu3->addAction("3_2",this,SLOT(actionsSlot())); menu3->addAction("3_3",this,SLOT(actionsSlot())); menu2->addAction("2_2",this,SLOT(actionsSlot())); menu2->addAction("2_3",this,SLOT(actionsSlot())); m_menu1->addSeparator(); m_menu1->addAction("1_4",this,SLOT(actionsSlot())); }createMenu()函数中创建了三个菜单,通过addAction()函数添加小项目到每个菜单中,addAction()同时提供关联到对象槽函数的重载版本,这样就可以在添加的同时也关联好槽函数,addMenu()给菜单添加下级菜单,当鼠标滑到addMenu()添加的项目是会自动弹出下级菜单。addSeparator()在每个QAction之间添加分离器。通过addAction()和addMenu()的结合使用就可以构造看起来很强大的多级菜单,再通过实现它们的槽函数我们就可以实现每个QAction被点击时要响应的事件。
void Widget::actionsSlot() { QAction *action = (QAction*)sender(); QString actionText = action->text(); qDebug()<<actionText<<"triggerred!"<<endl; if("1_1" == actionText) { //... } else if("1_2" == actionText) { //... } //... }该槽函数处理QAction点击的时候要处理的事情。通过sender()取得发送信号的对象,再取得QAction的属性就可以在代码逻辑中分别处理不同的QAction该处理的事情。
void Widget::contextMenuEvent(QContextMenuEvent *event) { m_menu1->exec(QCursor::pos()); event->accept(); }重写contextMenuEvent()事件用于处理鼠标右键事件,但右击鼠标时,在鼠标点击的位置弹出菜单。
运行截图
源码下载地址:Qt多级菜单(右键菜单)
相关文章推荐
- Qt5.10 用基础控件实现下拉列表菜单,可以展开多级菜单
- 利用多叉树实现Ext JS中的无限级树形菜单(一种构建多级有序树形结构JSON的方法)
- Android提高十七篇之多级树形菜单的实现
- zTree下拉菜单多级菜单多选实现
- Android提高十七篇之多级树形菜单的实现
- 单片机实现多级菜单
- Android提高十七篇之多级树形菜单的实现
- Android开发之多级下拉列表菜单实现(仿美团,淘宝等)
- 多级菜单 简单实现
- js实现网页多级级联菜单代码
- Qt 实现系统托盘,托盘菜单,托盘消息
- Qt之实现下拉列表菜单
- 使用QT实现右击菜单实例
- jquery实现红色竖向多级向右展开的导航菜单效果
- Shell实现多级菜单系统安装维护脚本实例分享
- 纯css实现多级菜单
- js实现具有高亮显示效果的多级菜单代码
- 使用PopupWindow + 2个ListView实现仿 美团/淘宝 多级分类菜单效果
- Android 多级菜单的实现