您的位置:首页 > 其它

如何让菜单点击后不消失

2013-10-19 14:27 288 查看
本篇文章摘自 CSDN论坛区 allencui0313的帖子,为了以后用到时好找就收藏到自己的空间里。

http://bbs.csdn.net/topics/390276550

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

因此重载菜单,重写mouseReleaseEvent,本篇文章是设置action的属性,根据设置的属性来控制行为。

#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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: