在Qt应用程序中,我有一堆自动创建的QActions(菜单项),我将其添加到菜单栏的菜单中。每个打开一个不同的文件。我想将它们全部连接到同一个插槽,以免多次写入相同的代码。但是,从那个插槽中,我如何确定触发了哪些QAction?
(示例:在Cocoa中,我使用动作选择器中的sender参数执行此操作。)
谢谢!
答案 0 :(得分:17)
我会连接到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);
}
答案 1 :(得分:15)
您有两种选择:
sender()
,这将返回触发信号的操作。QSignalMapper
。答案 2 :(得分:10)
在Qt中,您还可以访问发件人:QObject::sender
。
答案 3 :(得分:0)
如上所述,您可以通过QObject::sender()
访问发射器句柄,这是Qt中的一个很棒的功能(特别是在处理n个运行时,未知类型的动态实例化对象时 - 可能在设置中定义)文件某处。)