Qt笔记 -- QMetaObject::invokeMethod

六月ゝ 毕业季﹏ 提交于 2019-11-30 12:40:02

静态方法QMetaObject::invokeMethod() 的定义如下:

bool QMetaObject::invokeMethod ( QObject * obj, const char * member,Qt::ConnectionType type,  
QGenericReturnArgument ret, QGenericArgument val0 = QGenericArgument( 0 ),)  

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

QMetaObject::invokeMethod(object, "methodName",   
Qt::QueuedConnection,   
Q_ARG(type1, arg1),   
Q_ARG(type2, arg2));  

上述调用为异步调用。请注意,因为上面所示的参数需要被在构建事件时进行硬拷贝,参数的自定义型别所对应的类需要提供一个共有的构造函数、析构函数以及拷贝构造函数。而且必须使用注册Qt型别系统所提供的qRegisterMetaType() 方法来注册这一自定义型别。

Q_INVOKABLE与QMetaObject::invokeMethod均由元对象系统唤起。这一机制在Qt C++/QML混合编程,跨线程编程,Qt Service Framework 以及 Qt/ HTML5混合编程以及里广泛使用。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!