当前位置:编程学习 > wap >>

QGraphicsItem右键菜单事件

定义了QGraphicsItem,已经集成于QObject,用于定于槽函数。可是槽函数就是触发不了;代码是这样的:
void GraphicsItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)  
{    
QMenu menu;
QAction *removeAction = menu.addAction("Remove");
QAction *selectedAction = menu.exec(event->screenPos()); 
connect(removeAction,SIGNAL(triggered()),this,SLOT(slotRemoveItem()));
}
请问为什么点击removeAction,无法进入到槽函数slotRemoveItem呢? --------------------编程问答-------------------- 改成:
void GraphicsItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)   
{   
QMenu menu;
QAction *removeAction = menu.addAction("Remove");
QAction *selectedAction = menu.addAction("selected");
menu.exec(event->screenPos());  
connect(removeAction,SIGNAL(triggered()),this,SLOT(slotRemoveItem()));
}

试试 --------------------编程问答-------------------- 我写的怎么都可以,我觉得不是这里的问题 --------------------编程问答-------------------- QMenu menu;
QAction *removeAction = menu.addAction("Remove");
QAction *selectedAction = menu.addAction("selected");
menu.exec(event->screenPos()); 显示菜单  
connect(removeAction,SIGNAL(triggered()),this,SLOT(slotRemoveItem()));链接action和槽
把最后面两行调换一下。 --------------------编程问答--------------------
引用楼主  的回复:
定义了QGraphicsItem,已经集成于QObject,用于定于槽函数。可是槽函数就是触发不了;代码是这样的:
void GraphicsItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)  
{    
QMenu menu;
QAction *removeAction = menu.addAction("Rem……


menu 分配在栈上。 
函数顺序执行。。
当退出contextMenuEvent 函数作用域的时候。。menu弹栈销毁。。。。


只所以menu.exec()能有反应。是因为。exec()函数开启了一个事件循环。程序相当于挂在那里。意思是contextMenuEvent还没有退出。
。。。

最后 要这样写。
connect(removeAction,SIGNAL(triggered()),this,SLOT(slotRemoveItem()));链接action和槽
menu.exec(event->screenPos()); 
--------------------编程问答-------------------- 你把menu 分配到堆上。new 出来。。但是注意内存管理。。 --------------------编程问答-------------------- 感谢三楼四楼。问题得到解决 --------------------编程问答-------------------- 咋解决的呢,能不能说一下啊~~~~
补充:移动开发 ,  Qt
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,