首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QMetaObject::invokeMethod不调用时隙

QMetaObject::invokeMethod不调用时隙
EN

Stack Overflow用户
提问于 2021-04-17 00:07:55
回答 1查看 97关注 0票数 0

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

invokeMethod调用

代码语言:javascript
复制
VmsWorkspaceManager::InfoStruct info;

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

插槽的定义;

代码语言:javascript
复制
public slots:

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-17 09:41:49

首先,确保在InfoStruct头底部有这个声明:

代码语言:javascript
复制
Q_DECLARE_METATYPE(Vms::GuiWidgets::VmsWorkspaceManager::InfoStruct)

然后,在main函数的基础上调用:

代码语言:javascript
复制
int main(int argc, char *argv[])
{
    qRegisterMetaType<Vms::GuiWidgets::VmsWorkspaceManager::InfoStruct>("Vms::GuiWidgets::VmsWorkspaceManager::InfoStruct");

由于您使用的是名称空间,所以您必须是与它们完全一致的,所以请确保槽签名如下所示:

代码语言:javascript
复制
Vms::GuiWidgets::VmsWorkspaceManager::InfoStruct UpdateScreenshots() const;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67133510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档