我想在动态创建的QAction点击时使用参数执行我的插槽,但是在QMenu中创建QAction时我无法添加我的变量,并且默认的triggered()插槽无法通过它.
为了更清楚,我想要达到这样的目的:
connect(someAction,SIGNAL( triggered(MyClass*) ),this,SLOT( execute(MyClass*) );
我怎么能得到这个?我试图创建自定义QAction,但我不知道如何将它添加到QMenu – 没有像addAction(QAction)这样的函数.
解决方法
您可以使用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 *>(); }