转自:https://blog.csdn.net/weixin_40912639/article/details/100170858

效果

摘要

这段时间在写树的时候需要用到右键菜单,但是原生的不太好看,且用起来有点僵硬(不太熟悉),于是抱着手艺人的素养,就自己鼓捣了一个出来,虽然不一定非常通用,但是自己做出来的使用比较方便,后期的改动也会比较方便。

原理

为了更方便的调用下级节点,第一级菜单使用的是Repeater,第二级使用的是listview,通过它们自身的动态创建,来实现多级菜单,而为了更方便的使用,菜单的model使用Jason来传入,所以基本思路就是解析传入的model,根据model来动态创建节点,以实现菜单的效果。

代码

main.qml  子定义菜单的调用

import QtQuick 2.7
import QtQuick.Window 2.2Window {visible: truewidth: 640height: 480title: qsTr("闻天语~")property var model: {"七里香":["借口","外婆","将军","搁浅","乱舞春秋","困兽之斗","园游会"],"十一月的萧邦":["夜曲","发如雪","推流","枫"],"依然范特西":["夜的第七章","听妈妈的话","本草纲目"],"我很忙我很忙":["牛仔很忙","彩虹","蒲公英的约定"],"魔杰座":["稻香","蛇舞","花海","魔术先生","说好的幸福呢","兰亭序","乔克叔叔"],"叶惠美":["晴天"," 东风破","她的睫毛"],"八度空间":["半岛铁盒","龙拳","回到过去"],}color: "dimgray"MouseArea{anchors.fill: parentacceptedButtons: Qt.RightButton|Qt.LeftButtononClicked: {if(mouse.button == Qt.RightButton){menu.show(mouse.x,mouse.y)}else{menu.close()}}}MenuEx{id:menuvisible: falsemainModel:modelbtnHeight: 25width: 100x:20y:20}
}

MenuItemEx.qml 菜单的子项

import QtQuick 2.0
import QtQuick.Controls 1.4Rectangle{id:itemRootproperty variant model: []property string showText : ""property ExclusiveGroup exclusiveGroup:expproperty bool checked: falseonExclusiveGroupChanged: {if (exclusiveGroup)exclusiveGroup.bindCheckable(itemRoot)}height:btnHeightcolor:checked?colo_c:menuRoot.colorText {text: showTextanchors.centerIn: parent}MouseArea{id:mainMouseanchors.fill: parenthoverEnabled:trueonEntered:checked=true}Component.onCompleted:{for(var i in model){listModel.append({"sText": model[i]})console.log("s"+i ,model[i])}}ListModel{id:listModel}Rectangle{anchors.left:parent.rightanchors.leftMargin: 3height: parent.height*model.length+2*extrawidth: parent.widthcolor: menuRoot.colorvisible:itemRoot.checkedradius: extraListView{model:listModelheight: parent.height-8width: parent.widthy:extraid:listviewdelegate:Rectangle{color: listview.currentIndex==index?"lightblue": childMouse.containsMouse?colo_c:menuRoot.colorText {x:20anchors.verticalCenter: parent.verticalCentertext: sText}height:btnHeightwidth:itemRoot.widthMouseArea{anchors.fill: parentid:childMousehoverEnabled: trueonClicked: {listview.currentIndex=index}}}}}
}

MenuEx.qml 菜单

import QtQuick 2.0
import QtQuick.Controls 1.4Rectangle{id:menuRootcolor: "white"property int btnHeight: valueproperty int extra: 5property variant mainModel:[]property variant keys : []property string colo_c: "lightgray"height: btnHeight*keys.length+2*extraradius: extraComponent.onCompleted:{keys=Object.keys(mainModel)for (var i in keys){mainListModel.append({"btnText":keys[i]})}}ExclusiveGroup{id:exp}ListModel{id:mainListModel}ListView{y:extraheight: parent.height-8model:mainListModelwidth: parent.widthdelegate: MenuItemEx{showText:btnTextmodel:mainModel[btnText]width:menuRoot.width}
}
function show(inX,inY)
{menu.x=inXmenu.y=inYvisible=true
}
function close()
{exp.current.checked=falsevisible=false
}
}

qml自定义菜单-QML相关推荐

  1. QML自定义图表图例

    QML自定义图表图例 项目简介 项目技术 项目展示 主要源码片段解析 获取完整项目源码传送门 项目简介 创建自己的自定义图例. 创建自己的自定义图例,而不是使用ChartView API的内置图例. ...

  2. Qml自定义等待指示器

    QtQuick.Controls 2 大部分组件提供的定制化一般都是 contentItem和background contentItem描述组件的可视化区域的显示效果 background描述组件的 ...

  3. Qt使用C++封装qml自定义图形控件(QQuickPaintedItem)

    C++封装qml自定义图形控件 QtWidget.qml简介 通过继承QQuickPaintedItem封装控件 描述 公用接口定义 代码示例 效果图 QtWidget.qml简介 Qt提供了2套UI ...

  4. Qt 3D:高级自定义材质QML示例

    Qt自带集成开发环境(IDE),名为Qt Creator.它可以在Linux.OS X和Windows上运行,并提供智能代码完成.语法高亮.集成帮助系统.调试器和剖析器集成,还集成了所有主要的版本控制 ...

  5. confirm自定义按钮文字_公众号涨粉神器——自定义菜单,互动运营更灵活!

    你知道怎么正确运营微信公众号么?你对公众号运营手段了解多少?你能充分认识到公众号的商业价值么?你知道有哪些可靠的公众号运营工具呢?......对于刚入行的微信公众号运营者来说,比起长篇大论.很难理解其 ...

  6. Java微信公众平台开发(十)--微信自定义菜单的创建实现

    转自:http://www.cuiyongzhi.com/post/48.html 自定义菜单这个功能在我们普通的编辑模式下是可以直接在后台编辑的,但是一旦我们进入开发模式之后我们的自定义菜单就需要自 ...

  7. 微信公众平台对所有公众号开放自定义菜单

    据统计,微信公众号已达1000多万了,但大多数没有微信认证,且没有开发能力,为此微信公众平台开放了自定义菜单功能给所有公众号,这是微信团队年前给广大自媒体送的大礼,期待微信越来越开放 公众帐号运营者点 ...

  8. 右键脚本html,js实现右键自定义菜单

    本文实例为大家分享了右键自定义菜单的具体代码,供大家参考,具体内容如下 #menu { height: 200px; width: 50px; border: 1px solid gray; back ...

  9. php创建菜单_php实现微信公众号创建自定义菜单功能的实例代码

    目的 创建自定义菜单,实现菜单事件. 首先获取Access_Token 接口: 我用的是测试号,修改APPID和APPSECRET,然后浏览器访问上面这个Url即可生成Access_Token 然后配 ...

最新文章

  1. android 自定义刷新控件,Android开发中MJRefresh自定义刷新动画效果
  2. SAP CRM Fiori应用My Note的OData调用设计
  3. js实现排序去重计算字符次数
  4. 使用python对数据集进行批处理
  5. 《python透明人士,他是凭什么成为主流编程的宠儿?!》python基础语法
  6. php尿,Java/Python/PHP/C 图文详解它们之间的尿性
  7. 蓝桥杯官网 试题 PREV-274 历届真题 分果果【第十二届】【省赛】【研究生组】【C++】【Java】两种解法
  8. Windows 操作系统成功背后的传奇工程师
  9. 第39级台阶 蓝桥杯
  10. 开天辟地第一人---盘古
  11. 荣耀80Pro直屏版和荣耀80Pro区别?
  12. 双屏(Daul Monitor)很爽
  13. 公安联勤指挥调度实战应用系统软件平台解决方案
  14. Arduino基础入门二之呼吸灯
  15. 拆解了20个企业微信社群的我, 发现【社群营销】最好的方法应该是这样!
  16. 微信小程序盲盒系统源码 附带教程
  17. LeetCode 904. 水果成篮
  18. 计算机最简单的爱情音乐,音乐里那些最动人的情话,适合一个人在家静静聆听...
  19. Excel数据分析常用函数①——查询函数(vlookup,hlookup,lookup,match,index…)
  20. 简易三国杀:儿童识字卡牌

热门文章

  1. hadoop 2.7.4 单机版安装
  2. SDP sedumi yalmip
  3. 社交网站facebook_如何退出Facebook,Twitter,Google +和其他社交网络
  4. 计算机编程课英语,计算机编程及常用术语英语词汇大全课件.doc
  5. Win8.1系统的备份还原功能
  6. Win8/8.1 恢复功能大比拼:系统还原、刷新和重置,用哪个
  7. Beyond,一次迟到的告别
  8. 怎样将一个dataframe存入csv文件,不带行标
  9. pixhawk绿灯快闪慢闪的意思
  10. lvds接口屏线安装图解_LVDS屏线接口LVDS接口介绍