当前位置: 首页 > 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 调用、脚本式引擎中非常有用。

相关文章:

  • 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抓账号密码
  • 图集︱“中国排面”威武亮相
  • 外交部:习近平主席同普京总统达成许多新的重要共识
  • 古埃及展进入百天倒计时,闭幕前168小时不闭馆
  • 习近平同俄罗斯总统普京举行会谈
  • 上海加力提速推进优化营商环境,明确“十大攻坚突破任务”
  • 两次蹚入同一条河,巴萨这一晚被命运抛弃