送分2 ~关于点击QAction QMenu不消失的问题的解决方法

圆圆胖胖的车车 2012-11-10 12:17:43
具体问题http://bbs.csdn.net/topics/390275308

经过分析源码后,发现其实action的触发是由menu来控制的。当QMenu收到QMouseReleased事件后,会根据坐标找到当前的QAction并激发。然后自己隐藏。


#include "mymenu.h"
#include <QApplication>
#include <QDebug>
MyMenu::MyMenu(QWidget *parent) :
QMenu(parent)
{
//add action
QAction *action1 = new QAction("1",this);
QAction *action2 = new QAction("2",this);
QAction *action3 = new QAction("3",this);
QAction *action4 = new QAction("4",this);

action1->setCheckable(true);
action2->setCheckable(true);
action3->setCheckable(true);
action4->setCheckable(true);

action1->setProperty("canHideMenu","true");
action2->setProperty("canHideMenu","true");
action3->setProperty("canHideMenu","false");
action4->setProperty("canHideMenu","false");


this->addAction(action1);
this->addAction(action2);
this->addAction(action3);
this->addAction(action4);

}

void MyMenu::mouseReleaseEvent(QMouseEvent *e)
{

QAction *action = this->actionAt(e->pos());
if(action)
{

QString strCanHide = action->property("canHideMenu").toString();
qDebug() << "MyMenu::mouseReleased: " << strCanHide;
if(strCanHide == "true")
{
QMenu::mouseReleaseEvent(e);
return;
}
else
{
action->activate(QAction::Trigger);
return;
}
}
QMenu::mouseReleaseEvent(e);

}


...全文
1776 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
moxiaofeng77 2012-11-12
  • 打赏
  • 举报
回复
mark一下,说不定以后会碰到相同的问题
  • 打赏
  • 举报
回复
周一结贴。。来就送分了。。

16,862

社区成员

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

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