Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 带有自定义参数的QAction_C++_Qt - Fatal编程技术网

C++ 带有自定义参数的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)的函数 使用

我希望在单击动态创建的QAction时使用参数执行插槽,但在QMenu中创建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就是您所需要的。