微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

QMetaObject::invokeMethod 不调用槽

如何解决QMetaObject::invokeMethod 不调用槽

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

invokeMethod 调用

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;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。