当前位置: 首页 > news >正文

QMetaObject::invokeMethod调用失败

排除了不是多线程与Qt::ConnectionType不匹配,也不是函数声明不一致
原来是返回值和形参的顺序反了,见QMetaObject::invokeMethod的定义

[static] bool QMetaObject::invokeMethod(QObject *obj, const char *member, Qt::ConnectionType type, 
QGenericReturnArgument ret, 
QGenericArgument val0 = QGenericArgument( Q_NULLPTR ), 
QGenericArgument val1 = QGenericArgument(), ...)

class MyWidget : public QWidget
{...Q_INVOKABLE QString MyWidget::Get(const QString &key);
}

想在其它线程同步调用,错误写法

MyWidget *wig;
...
QString key = "Key";
QString value;
QMetaObject::invokeMethod(wig, "Get", Qt::BlockingQueuedConnection,Q_ARG(const QString &, key), Q_RETURN_ARG(QString, value));

正确写法:

QMetaObject::invokeMethod(wig, "Get", Qt::BlockingQueuedConnection,Q_RETURN_ARG(QString, value), Q_ARG(const QString &, key));

还有一点要注意,被调用的函数必须声明Q_INVOKABLE ,或者作为槽函数,否则invokeMethod也会调用失败

相关文章:

  • 基于rpc框架Dubbo实现的微服务转发实战
  • 【基础】每天掌握一个 Linux 命令:grep
  • ICLR文章如何寻找页码
  • cuda数据传输
  • Kubernetes (k8s)版本发布情况
  • 经典算法:回文链表
  • 使用VSCode开发Flask指南
  • Android设置顶部状态栏透明,以及状态栏字体颜色
  • 如何修改项目在浏览器中的小图标
  • OpenWRT prplOS-- ubus命令配置参数
  • Python基于蒙特卡罗方法实现投资组合风险管理的VaR与ES模型项目实战
  • 用WPDRRC模型,构建企业安全防线
  • 防爆对讲机:危险作业场景下的通信守护者
  • 服务器安装软件失败或缺依赖怎么办?
  • Dify应用类型和工作流介绍
  • c++第七天--特殊运算符的重载练习
  • 极昆仑智慧与数元灵科技达成战略合作
  • PHP文件读取漏洞全面剖析:触发点与利用技术
  • IBMS综合运维平台业务分析与BA楼宇自控系统技术架构与应用
  • JS逆向爬虫教程与实战技巧
  • 网页设计师需要学什么专业/太原seo培训
  • 做网站的是什么/新闻报道最新消息今天
  • 怎么找淘宝客网站/推广新产品最好的方法
  • 上海大型网站制作公司/北京网络营销推广外包
  • 青岛做视频的网站/广州网站制作实力乐云seo
  • 订阅号登陆平台/网站优化seo