gpt4 book ai didi

c++ - QMenu 被多次激活

转载 作者:行者123 更新时间:2023-11-28 05:52:45 24 4
gpt4 key购买 nike

我正在玩弄提到的 Qt 演示浏览器示例 here并在我尝试对书签处理代码进行微小更改时注意到异常情况。

我的目的是让工具栏中的书签在新选项卡而不是现有选项卡中打开。它非常适合直接位于书签选项卡上的书签。但是文件夹内的书签是那些行为异常的书签。

我在 bookmarks.cpp 中修改了 BookmarksToolBar::activated SLOT在新选项卡而不是现有选项卡中打开 url。那时我注意到 SLOT 被多次调用,计数等于菜单呈现的次数。即,第一次激活菜单项时,SLOT 被调用一次,下一次激活菜单项时,SLOT 被调用两次,依此类推。

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

问题项目是 Qt 附带的示例项目“选项卡浏览器”,可以通过单击 Qt-Creator 欢迎屏幕上的“示例”来访问。因此我没有在这里发布任何源代码。

任何有助于理解此异常原因的指导或帮助以及修复它的可能解决方案将不胜感激。

最佳答案

自己找到了问题的原因和解决方案。问题的根源在modelmenu.cpp .

很明显,ModelMenu::createMenu 方法在每次方法执行时将 QMenu::triggeredQMenu::hovered 信号连接到 SLOT叫。触发的 SLOT 发出信号 ModelMenu::activated

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

替换这个:

connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(triggered(QAction*)));
connect(menu, SIGNAL(hovered(QAction*)), this, SLOT(hovered(QAction*)));

有了这个:

connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(triggered(QAction*)),Qt::UniqueConnection);
connect(menu, SIGNAL(hovered(QAction*)), this, SLOT(hovered(QAction*)),Qt::UniqueConnection);

修复了问题。就把它留在这里,希望这对将来的人有所帮助。

关于c++ - QMenu 被多次激活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34870798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com