C++ 带有自定义参数的QAction
我希望在单击动态创建的QAction时使用参数执行插槽,但在QMenu中创建QAction时无法添加变量,默认的C++ 带有自定义参数的QAction,c++,qt,C++,Qt,我希望在单击动态创建的QAction时使用参数执行插槽,但在QMenu中创建QAction时无法添加变量,默认的triggered()slot无法传递它 更清楚地说,我想归档如下内容: connect(someAction, SIGNAL( triggered(MyClass*) ), this, SLOT( execute(MyClass*) ); 我怎么能得到这个?我试图创建自定义QAction,但我不知道如何将其添加到QMenu-没有类似于addAction(QAction)的函数 使用
triggered()
slot无法传递它
更清楚地说,我想归档如下内容:
connect(someAction, SIGNAL( triggered(MyClass*) ), this, SLOT( execute(MyClass*) );
我怎么能得到这个?我试图创建自定义QAction,但我不知道如何将其添加到QMenu-没有类似于addAction(QAction)
的函数
QAction::setActionGroup()
QAction::setData()
在每个QAction
中存储自定义数据将
QActionData的信号触发(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 *>();
}
void execute()
{
QAction*act=qobject_cast(发送方());
QVariant v=act->data();
YourClass yourPointer=(YourClass*)v.value();
}
您到底想通过什么考试?听起来你试图以一种不被推荐的方式传递一些东西。尝试寻找替代概念,比如单例实例。也许,QActionGroup就是您所需要的。