【发布时间】:2023-12-13 13:41:01
【问题描述】:
我在QGraphicsView 子类中创建了QAction 的实例,并将其连接到我在同一个类中的插槽。
QAction *action = new QAction(tr("New"), this);
action->setObjectName("addStopAction");
action->setShortcut(QKeySequence(Qt::ControlModifier | Qt::Key_N));
connect(action, SIGNAL(triggered()), this, SLOT(addNew()));
addAction(action);
Slot 是在分配给QGraphicsView 的场景上创建QGraphicsItem 的新实例的函数。
void MyGraphicsView::addNew() {
// Insert new item at cursor position
}
我还将这个动作添加到一个QMenu 作为我的类上下文菜单。
QMenu *contextMenu = new QMenu(this);
contextMenu->addAction(action);
一切正常。当我按 Command/Ctrl + N 时,会在光标位置创建新项目。但是当我右键单击并从上下文菜单中选择操作时,我希望在菜单位置创建新项目。
当然,如果 SLOT 在 contextMenuEvent 之后被调用或类似的东西,我可以做一些小技巧来标记,但我想知道的是:
有什么方法可以找出是什么让QAction 在连接的SLOT 内发出triggered() 信号?这样,当我应该将新项目放置在光标位置以及在 SLOT 实现内的上下文菜单位置时,我可以处理。
【问题讨论】:
标签: c++ qt qt4 signals-slots