确定在Qt​​中触发了哪个菜单项

时间:2009-10-15 22:31:40

标签: qt

在Qt应用程序中,我有一堆自动创建的QActions(菜单项),我将其添加到菜单栏的菜单中。每个打开一个不同的文件。我想将它们全部连接到同一个插槽,以免多次写入相同的代码。但是,从那个插槽中,我如何确定触发了哪些QAction?

(示例:在Cocoa中,我使用动作选择器中的sender参数执行此操作。)

谢谢!

4 个答案:

答案 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)

您有两种选择:

答案 2 :(得分:10)

在Qt中,您还可以访问发件人:QObject::sender

答案 3 :(得分:0)

如上所述,您可以通过QObject::sender()访问发射器句柄,这是Qt中的一个很棒的功能(特别是在处理n个运行时,未知类型的动态实例化对象时 - 可能在设置中定义)文件某处。)