Q_INVOKABLE与invokeMethod用法全解

Q_INVOKABLE与invokeMethod用法全解

请尊重原创作品和译文。转载请保持文章完整性,并以超链接形式注明原始作者地址http://blog.csdn.net/changsheng230,方便其他朋友提问和指正。

Qt Quick宏浅议一文中,我们将介绍constchar * member,

  • QGenericReturnArgument ret, QGenericArgument val0 = QGenericArgument( 0 ), …)

  • invokeMethod 的用法为,尝试调用对象obj的方法member(注意member可以为信号或者是槽),如何member可以被调用,则返回真,否则返回假。 QMetaObject::invokeMethod可以是异步调用,也可以是同步调用。这取决与它的连接方式Qt::DirectConnection,则为同步调用,若为"methodName",

  • *Q_ARG(type1, arg1),*

  • *Q_ARG(type2, arg2));*
  • 上述调用为异步调用。请注意,因为上面所示的参数需要被在构建事件时进行硬拷贝,参数的自定义型别所对应的类需要提供一个共有的构造函数、析构函数以及拷贝构造函数。而且必须使用注册Qt C++/QML混合编程,跨线程编程*Qt*/ HTML5混合编程以及里广泛使用。
*Qt*元对象系统。考虑在QML中使用Qt 4.7
  • import Shapes 5.0//自定义模块
  • Item {
  • width: 300; height: 200
  • Ellipse {
  • x: 50; y: 35; width: 200; height: 100
  • color:"blue"
  • MouseArea {
  • anchors.fill: parent
  • // 调用C++中定义的randomColor方法
  • onClicked: parent.color = parent.randomColor()
  • }
  • }
  • }

为了让上述QML代码成功的调用下面这段代码定义的randomColor()函数,最为关键的一点见randomColor方法用Q_INVOKABLE 修饰。
view plainprint?
1. #include
2. class EllipseItem :public QDeclarativeItem
3. {
4. Q_OBJECT
5. public:
6. Q_INVOKABLE QColor randomColor()const;
7. …
8. }

更多细节,请参看我的另一篇博文:QML与C++混合编程使用

在跨线程编程中的使用

我们如何调用驻足在其他线程里的QObject方法呢?事件循环与线程

*Qt服务框架是method*Q_INVOKEBLE来实现****

其中,最常见的与servicer交互的方法如下:
view plainprint?
1. QServiceManager manager;QObject storage ;
2. storage = manager.loadInterface("com.nokia.
if*(storage) QMetaObject::invokeMethod(storage,"deleteFile", Q_ARG(QString,"/tmp/readme.txt"));

上面的代码通过service的元对象提供的invokeMethod方法,调用文件存储对象的deleteFile() 方法。客户端不需要知道对象的类型,因此也没有链接到具体的service库。  当然在服务端的deleteFile方法,一定要被标记为Q_INVOKEBLE,才能够被元对象系统识别

**method**和property来通信,就像本地对象一样。服务可以设定为在客户端间共享,或针对一个客户端。 请注意,在method仅支持跨线程。 下图是跨进成的服务/客户段通信示意图(图片来自诺基亚论坛)。这里我们可以清楚的看到,invokable serivceFramework****

**有关Qt Service Framework文档****

原文链接: https://www.cnblogs.com/senior-engineer/p/5597632.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/235473

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午4:39
下一篇 2023年2月13日 下午4:39

相关推荐