在Qt应用程序中,我有一堆自动创建的QActions(菜单项),我将其添加到菜单栏中的菜单中.每个打开一个不同的文件.我想将它们全部连接到同一个插槽,以免多次写入相同的代码.但是,从那个插槽中,我如何确定触发了哪些QAction?
(示例:在Cocoa中,我使用动作选择器中的sender参数执行此操作.)
谢谢!
小智 19
我会连接到QMenu的"触发"信号,而不是每个QAction.这将为您提供被单击作为第一个参数的QAction.
void MyObject::menuSelection(QAction* action)
{
qDebug() << "Triggered: " << action->text();
}
void MyObject::showMenu(QPoint menuPos)
{
QMenu menu;
menu.addAction( "File A" );
menu.addAction( "File B" );
menu.addAction( "File C" );
connect(&menu, SIGNAL(triggered(QAction*)), this, SLOT(menuSelection(QAction*)));
menu.exec(menuPos);
}
Run Code Online (Sandbox Code Playgroud)
Luk*_*ský 15
您有两种选择:
sender()
在插槽中调用,这将返回触发信号的动作.QSignalMapper
.roh*_*npm 10
在Qt中,您还可以访问发件人:QObject::sender
.