我想在动态创建QAction时执行带参数的插槽,但在QMenu中创建QAction时无法添加我的变量,默认triggered()插槽无法通过它.
为了更清楚,我想要达到这样的目的:
connect(someAction, SIGNAL( triggered(MyClass*) ), this, SLOT( execute(MyClass*) );
Run Code Online (Sandbox Code Playgroud)
我怎么能得到这个?我试图创建自定义QAction,但我不知道如何将它添加到QMenu - 没有像这样的功能addAction(QAction).
vah*_*cho 13
您可以将参数作为QVariantusing QAction::setData()函数存储在操作本身中.例如:
QVariant v = qVariantFromValue((void *) yourClassObjPointer);
action->setData(v);
Run Code Online (Sandbox Code Playgroud)
在插槽中,您将必须提取指针,如:
void execute()
{
QAction *act = qobject_cast<QAction *>(sender());
QVariant v = act->data();
YourClass yourPointer = (YourClass *) v.value<void *>();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1936 次 |
| 最近记录: |