使用自定义参数进行QAction

时间:2015-02-21 14:31:05

标签: c++ qt

我想在动态创建QAction时执行带参数的插槽,但是在QMenu中创建QAction时我无法添加变量,默认triggered()插槽无法通过它。

更清楚的是,我想要达到这样的目的:

connect(someAction, SIGNAL( triggered(MyClass*) ), this, SLOT( execute(MyClass*) );

我怎么能得到这个?我尝试创建自定义QAction,但我不知道如何将其添加到QMenu - 没有像addAction(QAction)这样的功能。

2 个答案:

答案 0 :(得分:12)

您可以使用QVariant函数将参数作为QAction::setData()存储在操作本身中。例如:

QVariant v = qVariantFromValue((void *) yourClassObjPointer);
action->setData(v);

在插槽中,您必须提取指针,如:

void execute()
{
    QAction *act = qobject_cast<QAction *>(sender());
    QVariant v = act->data();
    YourClass yourPointer = (YourClass *) v.value<void *>();
}

答案 1 :(得分:1)

  1. 使用QAction

  2. 在一个QActionGroup中收集您的动态QAction::setActionGroup()
  3. 使用QAction::setData()在每个QAction中存储自定义数据。

  4. connect QActionData向某些triggered(QAction*)发出信号slot