Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
Multithreading QMetaObject::invokeMethod不调用插槽_Multithreading_Qt_Qmetaobject - Fatal编程技术网

Multithreading QMetaObject::invokeMethod不调用插槽

Multithreading QMetaObject::invokeMethod不调用插槽,multithreading,qt,qmetaobject,Multithreading,Qt,Qmetaobject,我在workspacemanager类中有一个名为UpdateScreenshots的公共信号,它获取一些小部件的屏幕截图。然后在我定义的结构中返回这些屏幕截图。这个调用是从一个线程发出的,因为截图显然只能在主线程上完成。但是,此invokemethod调用不起作用,并且未调用updatescreenshots插槽。我可能做错了什么? 有更好的方法吗 调用方法调用 VmsWorkspaceManager::InfoStruct info; QMetaObject::invokeMethod(m

我在workspacemanager类中有一个名为UpdateScreenshots的公共信号,它获取一些小部件的屏幕截图。然后在我定义的结构中返回这些屏幕截图。这个调用是从一个线程发出的,因为截图显然只能在主线程上完成。但是,此invokemethod调用不起作用,并且未调用updatescreenshots插槽。我可能做错了什么? 有更好的方法吗

调用方法调用

VmsWorkspaceManager::InfoStruct info;

QMetaObject::invokeMethod(m_Manager, "UpdateScreenshots", Qt::BlockingQueuedConnection,
Q_RETURN_ARG(Vms::GuiWidgets::VmsWorkspaceManager::InfoStruct, info));

插槽的定义

public slots:

/**
* \brief Updates the current screenshots to be sent to a remote client
*/
InfoStruct UpdateScreenshots() const;


首先,确保在
InfoStruct
标题的底部有此声明:

Q_DECLARE_METATYPE(Vms::GuiWidgets::VmsWorkspaceManager::InfoStruct)
然后,在
main
函数的顶部进行以下调用:

int main(int argc, char *argv[])
{
    qRegisterMetaType<Vms::GuiWidgets::VmsWorkspaceManager::InfoStruct>("Vms::GuiWidgets::VmsWorkspaceManager::InfoStruct");
Vms::GuiWidgets::VmsWorkspaceManager::InfoStruct UpdateScreenshots() const;