【问题标题】:QAction with custom parameter带有自定义参数的 QAction
【发布时间】:2015-02-21 14:31:04
【问题描述】:

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

为了更清楚,我想归档这样的东西:

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

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

【问题讨论】:

  • 你到底想传递什么?听起来您试图以不推荐的方式传递某些东西。尝试寻找替代概念,例如单例实例。
  • 可能,QActionGroup 就是你所需要的。

标签: c++ qt


【解决方案1】:

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

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 *>();
}

【讨论】:

    【解决方案2】:
    1. 使用QAction::setActionGroup() 将您的动态QAction 收集到一个QActionGroup

    2. 使用QAction::setData()将自定义数据存储在每个QAction中。

    3. connectQActionData的信号triggered(QAction*)到一些slot

    【讨论】:

      猜你喜欢
      • 2016-08-13
      • 1970-01-01
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 2013-06-17
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多