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

函数申明 Q_INVOKABLE

函数申明 Q_INVOKABLE

Q_INVOKABLE 是 Qt 提供的一个宏,主要用于 使成员函数能够被 Qt 的元对象系统(Meta-Object System)识别和调用。它通常用于让成员函数:

  1. 能够被 Qt 的 QMetaObject::invokeMethod() 调用;

  2. 能够被 Qt QML 引擎识别(如果你在用 QML);

  3. 可以跨线程使用信号/槽机制以外的方式调用。

✅ 使用场景
假设你有一个类定义如下:

class MyObject : public QObject {Q_OBJECTpublic:MyObject(QObject* parent = nullptr) : QObject(parent) {}Q_INVOKABLE void sayHello(); // 加了 Q_INVOKABLEvoid notInvokable(); // 没加
};

📌 特点解析

  1. 被 QMetaObject::invokeMethod() 调用
    只有使用了 Q_INVOKABLE 修饰的函数,才能被 invokeMethod() 调用:
MyObject obj;
QMetaObject::invokeMethod(&obj, "sayHello");     // ✅ OK
QMetaObject::invokeMethod(&obj, "notInvokable"); // ❌ 不可行
  1. 可以在 QML 中调用
    当你将 C++ 类注册到 QML 中时,只有 Q_INVOKABLE 或 public slots 的函数能在 QML 脚本中被直接调用:
MyObject {Component.onCompleted: sayHello() // ✅ 可以用
}
  1. 不影响成员函数的调用方式
    你仍然可以在 C++ 中直接调用它;

Q_INVOKABLE 只是告诉 Qt 元对象系统:“我想让这个函数能被反射式调用”。
在这里插入图片描述
✅ 总结一句话:
Q_INVOKABLE 是让一个普通成员函数进入 Qt 的“反射系统”,你可以通过字符串名字动态调用它,它在跨线程、QML 调用、脚本式引擎中非常有用。

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

相关文章:

  • Sql刷题日志(day8)
  • 【AWS+Wordpress】将本地 WordPress 网站部署到AWS
  • Kafka是什么?典型应用场景有哪些? (消息队列、流处理平台;日志收集、实时分析、事件驱动架构等)
  • Linux系统Shell脚本之shell数组、正则表达式、及AWK
  • 自编码器(Autoencoder)
  • 写程序,统计两会政府工作报告热词频率,并生成词云
  • Python 运维脚本
  • seata 1.5.2 升级到2.1.0版本
  • 力扣HOT100之链表:146. LRU 缓存
  • Inference-Time Scaling for Generalist Reward Modeling
  • (四)Java逻辑运算符和位运算符全面解析
  • 通配符 DNS 记录:应用场景与相关风险
  • SEO关键词与长尾词精准布局策略
  • 【Bootstrap V4系列】学习入门教程之 组件-折叠(Collapse)
  • mysql修改root密码
  • C++20新特新——02特性的补充
  • 性能比拼: Redis Streams vs Pub/Sub
  • 解决使用lettuce连接Redis超时的问题(tcpUserTimeout 参数失效问题)
  • YOLOv1:开创实时目标检测新纪元
  • Wireshark抓账号密码
  • 普通笔记本与军用加固笔记本电脑的区别,探索防水、防爆、防摔的真·移动工作站!
  • 在线PDF阅读方案:jQuery + PDF.js
  • 内网和外网怎么互通?外网访问内网的几种简单方式
  • 解决HomeAssistant 无法安装 samba share问题
  • 【数据库原理及安全实验】实验六 角色访问控制
  • 《C++ Templates》:有关const、引用、指针的一些函数模板实参推导的例子
  • C#——NET Core 中实现汉字转拼音
  • Redis 8.0 正式版发布,新特性很强!
  • 品质领航家装时代,亚新丽以匠心雕琢每一寸美好
  • 5.6-DAE实现