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和槽
把最后面两行调换一下。 --------------------编程问答--------------------
menu 分配在栈上。
函数顺序执行。。
当退出contextMenuEvent 函数作用域的时候。。menu弹栈销毁。。。。
只所以menu.exec()能有反应。是因为。exec()函数开启了一个事件循环。程序相当于挂在那里。意思是contextMenuEvent还没有退出。
。。。
最后 要这样写。
connect(removeAction,SIGNAL(triggered()),this,SLOT(slotRemoveItem()));链接action和槽
menu.exec(event->screenPos());
--------------------编程问答-------------------- 你把menu 分配到堆上。new 出来。。但是注意内存管理。。 --------------------编程问答-------------------- 感谢三楼四楼。问题得到解决 --------------------编程问答-------------------- 咋解决的呢,能不能说一下啊~~~~
补充:移动开发 , Qt