在不同区域鼠标右键菜单怎样显示不同的信息?

wuleeemail 2015-01-13 02:51:42
软件的主界面有左右两个部分,分别是wdget1,widget2,我准备在这两个界面部分,分别用鼠标进行右键弹出操作,当然希望显示的是不一样的。具体软件实现代码按照标准右键弹出的来写,可是结果却是鼠标在主界面上移动时,不管在wdget1,widget2上右键弹出的内容都是一样的,只认widgt1这个区域,按道理只要鼠标过了widget1这个区域鼠标右键弹出就会失效。在几个主要的函数里我也对QMenu()等几个主要的函数进行过基类的设置,比如:popupMenu1 = new QMenu(ui->widget1);popupMenu2 = new QMenu(ui->widget2);但为何没有效果呢?请大师们指点!
...全文
125 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
feiyangqingyun 2015-01-18
  • 打赏
  • 举报
回复
你应该在鼠标按下的地方弹出需要的右键菜单,你用popupMenu1 = new QMenu(ui->widget1);popupMenu2 = new QMenu(ui->widget2)这种方式设置父窗体是没用的,哪怕你设置的是一个按钮。必须指定一个鼠标位置弹出某种右键菜单。
像这种效果:



可以参见:http://www.qtcn.org/bbs/read-htm-tid-58116.html
dbzhang800 2015-01-13
  • 打赏
  • 举报
回复
有很多种方式可以实现你的要求,比如,分别实现你的两个Widget 的 contextMenuEvent() 等等
对dhtmlXTree进行一个小的扩展 需求1: 动态生成树形菜单,每个节点都有各自的URL地址,单击不同的节点框架页的右侧跳转到该节点所对应的URL。(框架页说明:左边是树形菜单;右边是显示页面相应信息的页面) 分析: dhtmlXTree提供了很好的添加,删除节点的方法,故选择dhtmlXTree。 但是dhtmlXTree不能满足"每个节点都有各自的URL地址,单击不同的节点框架页的右侧跳转到该节点所对应的URL"这点需求,因次想到了对dhtmlXTree进行一个小的扩展,即在其节点对象原有属性的基础上,再添加两个扩展属性。具体操作如下: 1、找到定义节点对象的那个函数(或方法) function dhtmlXTreeItemObject(itemId,itemText,parentObject,treeObject,actionHandler,mode) 修改为 function dhtmlXTreeItemObject(itemId,itemText,parentObject,treeObject,actionHandler,mode,url,target) 并在方法体中添加赋值语句:this.itemURL=url;this.itemTarget=target; 2、然后修改所有与dhtmlXTreeItemObject有关(直接或者间接相关)的方法: _attachChildNode,insertNewItem,insertNewChild,insertNewNext,_recreateBranch,_parseXMLTree 注:_parseXMLTree方法是与loadXML,loadXMLString相关的。 在这些方法中生成节点的语句中添加相应的参数和语句,以支持新添加的属性itemURL,itemTarget。 需求2: 为dhtmlXTree树上的每一个节点添加右键菜单。附:在树上的节点上点右键时才会生成菜单,空白区域单击时不会生成菜单。 分析: 1、用 dhtmlXTree + dhtmlxmenu 实现。 2、 用dhtmlxmenu生成菜单的部分代码: var menu = new dhtmlXMenuObject(); menu.setImagePath("imgs/"); menu.setIconsPath("images/"); menu.renderAsContextMenu(); menu.loadXML("dhtmlxmenu.xml?e="+new Date().getTime()); menu.addContextZone("treeboxbox_tree"); menu.addContextZone方法是为了把菜单添加到指定区域。 3、dhtmlXTreeObject.prototype._createItem方法是构造树形菜单上元素的具体实现方法。看这个方法的具体操作,可以发现它为每一个节点构建了一个table,节点的内容(即名字)放置在一个span中。 4、考虑到dhtmlxmenu实在指定的区域构建菜单,所以可以为dhtmlXTree树上的每一个节点添加右键事件,在这个右键事件里获得该节点对象所对应的区域,然后在这个区域内构建Menu菜单。 难点和解决方案: 1、怎样获得dhtmlXTree树上的每一个节点对象所对应的区域?(dhtmlXTreeObject.prototype._createItem方法没有为这个节点的span设置id) 解决方法: 在dhtmlXTreeObject.prototype._createItem方法中添加一个为span设置id的语句: 即: 在itemObject.span=document.createElement('span'); itemObject.span.className="standartTreeRow"; 后,新添加一句 itemObject.span.id="treeNode_"+itemObject.id;//为这个span新增一个Id属性 2、为dhtmlXTree树上的每一个节点添加右键事件,在这个右键事件里获得该节点对象所对应的区域,然后在这个区域内构建Menu菜单。 解决方法: a、为dhtmlXTree树上的每一个节点添加右键事件: tree.setOnRightClickHandler(treeOnRegihtClick);//右键事件 b、构建Menu菜单: var menu = new dhtmlXMenuObject(); function treeOnRegihtClick(id){ alert("右键 "+" span.id:"+tree.getItem(id).span.id); menu.setImagePath("imgs/"); menu.setIconsPath("images/"); menu.renderAsContextMenu(); menu.loadXML("dhtmlxmenu.xml?e="+new Date().getTime()); menu.addContextZone(tree.getItem(id).span.id);alert("width:"+tree.getItem(id).span.clientWidth); //var X=tree.getItem(id).span.getBoundingClientRect().left; //var Y=tree.getItem(id).span.getBoundingClientRect().top; var X=document.getElementById('mouseXPosition').value;//获得鼠标的横坐标位置 var Y=document.getElementById('mouseYPosition').value;//获得鼠标的纵坐标位置 menu.showContextMenu(X,Y);//调用showContextMenu方法显示菜单 说明:如果这儿不加上这条语句的话,第一次点击右键时只能生成菜单,但是显示不出菜单,下次点击右键Menu菜单才能弹出。 //menu._showContextMenu(X,Y,tree.getItem(id).span.id); } c、用 javascript 获取当页面上鼠标(光标)位置 <script type="text/javascript"> // 说明:获取鼠标位置 function mousePosition(ev){ if(ev.pageX || ev.pageY){ return {x:ev.pageX, y:ev.pageY}; } return { x:ev.clientX + document.body.scrollLeft - document.body.clientLeft, y:ev.clientY + document.body.scrollTop - document.body.clientTop }; } document.onmousemove = mouseMove; function mouseMove(ev){ ev = ev || window.event; var mousePos = mousePosition(ev); document.getElementById('mouseXPosition').value = mousePos.x; document.getElementById('mouseYPosition').value = mousePos.y; } 鼠标的位置:
C#资源管理器 C# File Explorer 该项目是本人大学期间短学期作业。 1 界面设计、布局美观便捷 2 在资源管理器左侧展示树形目录按计算机原本的目录结构进行显示 2.1 单击+号,展开节点,显示子目录节点 2.2 单击某节点主体,在右侧的列表区域显示该节点对应的目录下的所有子目录和文件的信息,并将对象统计数目后显示在状态栏,然后调整url地址栏的路径。 3 在资源管理器右侧列表区域显示url地址栏,即当前目录下的子目录和文件信息, 3.1 双击其中的对象,若是文件夹,则打开该文件夹;如果是文件,则运行该文件或选用合适的应用程序打开文件。 3.2 鼠标单击列表头,则根据这一列的内容对列表项进行排序。 3.3 鼠标右键单击,显示右键菜单。 3.4 列表支持多种视图显示:如大图标,小图标,列表,详细列表、平铺等 4 左上方返回上级按钮:右侧列表的内容改变为当前目录的父目录下的内容,并修改url地址栏 5 左上方前进,后退按钮:在已访问过的地址列表中切换访问路径,即历史记录的切换。 6 url地址栏实现下拉,下拉列表中显示已经访问过的路径条目;可以从下拉列表中任意选中一路径,当url地址栏的内容发生变化后,右侧列表显示新路径下的对象信息。 7 右上角文件搜索框以及搜索按钮:单击搜索按钮后,根据待搜索内容,在当前路径及子目录下搜索符合条件的文件(仅文件即可),并显示在右侧列表中。(设计算法,为资源管理器创建类似索引的数据结构和检索方法,可以加快搜索速度) 8 右键菜单功能:根据鼠标右键单击时的当前路径及单击对象,显示合理的右键菜单项目。并实现右键菜单中的功能 8.1 复制,剪切,粘贴,删除,重命名,刷新,属性,新建(其中新建必须包括:文件夹,文本文档,word文档,ppt演示文稿,excel电子表格文档)、打开 8.2 对于回收站考虑:彻底删除,清空回收站,还原(还原可选) 如有侵权请联系作者

16,211

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧