当前位置: 首页 > 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也会调用失败

http://www.dtcms.com/a/233583.html

相关文章:

  • 基于rpc框架Dubbo实现的微服务转发实战
  • 【基础】每天掌握一个 Linux 命令:grep
  • ICLR文章如何寻找页码
  • cuda数据传输
  • Kubernetes (k8s)版本发布情况
  • 经典算法:回文链表
  • 使用VSCode开发Flask指南
  • Android设置顶部状态栏透明,以及状态栏字体颜色
  • 如何修改项目在浏览器中的小图标
  • OpenWRT prplOS-- ubus命令配置参数
  • Python基于蒙特卡罗方法实现投资组合风险管理的VaR与ES模型项目实战
  • 用WPDRRC模型,构建企业安全防线
  • 防爆对讲机:危险作业场景下的通信守护者
  • 服务器安装软件失败或缺依赖怎么办?
  • Dify应用类型和工作流介绍
  • c++第七天--特殊运算符的重载练习
  • 极昆仑智慧与数元灵科技达成战略合作
  • PHP文件读取漏洞全面剖析:触发点与利用技术
  • IBMS综合运维平台业务分析与BA楼宇自控系统技术架构与应用
  • JS逆向爬虫教程与实战技巧
  • Arduino学习-按键灯
  • 【Linux手册】冯诺依曼体系结构
  • 高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
  • html-pre标签
  • .Net Framework 4/C# LINQ*
  • MySQL常用知识总结
  • 脑洞大开,将文本存入视频中
  • 【.net core】.KMZ文件解压为.KML文件并解析为GEOJSON坐标数据集。附KML处理多线(LineString)闭环问题
  • PPIO ×Apifox:一键调用模型API,高效开发AI应用
  • AdvancedLivePortrait V2版 - 一张照片生成生动任意表情图片/视频,支持50系显卡 本地一键整合包下载