QMetaObject::invokeMethod 不调用插槽

QMetaObject::invokeMethod does not call slot

我在工作区管理器 class 中有一个名为 UpdateScreenshots 的 public 信号,它可以截取一些小部件的屏幕截图。然后它 returns 这些屏幕截图在我定义的结构中。此调用是从一个线程进行的,因为截取屏幕截图显然只能在主线程上完成。但是,此 invokemethod 调用不起作用,并且未调用 updatescreenshots 插槽。我做错了什么? 有更好的方法吗?

invoke方法调用

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 header:

的底部有此声明
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;