gpt4 book ai didi

c++ - 有没有办法知道什么激活了 QAction?

转载 作者:行者123 更新时间:2023-11-30 02:57:39 25 4
gpt4 key购买 nike

我在 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 时,会在光标位置创建新项目。但是当我右键单击并从上下文菜单中选择操作时,我希望在菜单位置创建新项目。

如果在 contextMenuEvent 或类似事件之后调用了 SLOT,我当然可以做一些小技巧来标记,但我想知道的是:

有什么方法可以找出是什么让 QAction 在连接的 SLOT 中发出它的 triggered() 信号?这样我就可以处理何时应该将新项目放置在光标位置以及何时放置在 SLOT 实现中的上下文菜单位置。

最佳答案

当然,你可以查到连接的SLOT内部发出的是什么信号。

只需使用 QObject::sender()。在你的情况下:

void MyGraphicsView::addNew() {
QAction* pAction = qobject_cast<QAction*>(sender());
Q_ASSERT(pAction);
// do something with pAction
}

关于c++ - 有没有办法知道什么激活了 QAction?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14389058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com