首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QMenu多次激活

QMenu多次激活
EN

Stack Overflow用户
提问于 2016-01-19 07:24:51
回答 1查看 444关注 0票数 0

我在玩提到这里的Qt演示浏览器示例,当我尝试对书签处理代码做一个小更改时,我注意到了一个异常。

我的意图是使工具栏中的书签在一个新选项卡中打开,而不是在现有选项卡中打开。它非常适合直接位于书签标签上的书签。但是文件夹中的书签是那些行为古怪的书签。

我修改了BookmarksToolBar::activated SLOTbookmarks.cpp中,以打开一个新选项卡中的url,而不是现有的选项卡。这时,我注意到SLOT被多次调用,计数等于呈现菜单的次数。也就是说,当第一次激活菜单项时,调用SLOT一次,下一次激活某个项目时,调用SLOT两次等等。

我认为一定有多个信号槽连接,因此我检查了完成信号时隙连接的BookmarksToolBar::build()方法,发现控制流只进入该方法一次。我发现很难弄清楚SLOT是如何多次被调用的。

这个项目是一个示例项目'Tab浏览器‘,它随Qt而来,可以通过点击Qt-Creator欢迎屏幕上的“示例”来访问。因此,我没有在这里发布任何源代码。

任何指导或帮助理解这一异常的原因和可能的解决办法,以解决它将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-19 08:04:19

找出问题的原因并自己解决。问题的根源在于modelmenu.cpp

显然,ModelMenu::createMenu方法每次调用该方法时都会将QMenu::triggeredQMenu::hovered信号连接到时隙。插槽触发发射信号ModelMenu::activated

使用Qt::UniqueConnection应该可以解决这个问题。

取代这一点:

代码语言:javascript
复制
connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(triggered(QAction*)));
connect(menu, SIGNAL(hovered(QAction*)), this, SLOT(hovered(QAction*)));

在这方面:

代码语言:javascript
复制
connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(triggered(QAction*)),Qt::UniqueConnection);
connect(menu, SIGNAL(hovered(QAction*)), this, SLOT(hovered(QAction*)),Qt::UniqueConnection);

解决了这个问题。只是把这个留在这里希望这能在将来帮助到某人。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34870798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档