理解 QMetaObject :: invokeMethod 的参数 - QtQuick

Posted

技术标签:

【中文标题】理解 QMetaObject :: invokeMethod 的参数 - QtQuick【英文标题】:Understanding arguments of QMetaObject :: invokeMethod - QtQuick 【发布时间】:2013-10-01 08:04:23 【问题描述】:

发件人:http://qt-project.org/doc/qt-4.8/qtbinding.html#calling-functions

QMetaObject :: invokeMethod (object, "myQmlFunction", Q_RETURN_ARG(QVariant, returnedValue), Q_ARG(QVariant, msg));

但是,函数参数说:

发件人:http://qt-project.org/doc/qt-4.8/qmetaobject.html#invokeMethod

bool QMetaObject::invokeMethod ( QObject * obj, const char * member, Qt::ConnectionTypetype, QGenericReturnArgument ret, QGenericArgument val0 = QGenericArgument( 0 ),QGenericArgument val1 = QGenericArgument(), QGenericArgument val2 = QGenericArgument(),QGenericArgument val3 = QGenericArgument(), QGenericArgument val4 = QGenericArgument(),QGenericArgument val5 = QGenericArgument(), QGenericArgument val6 = QGenericArgument(),QGenericArgument val7 = QGenericArgument(), QGenericArgument val8 = QGenericArgument(),QGenericArgument val9 = QGenericArgument() ) [static]

所以,这个函数的第三个参数是:Qt::ConnectionType

Q_RETURN_ARG (QVariant, returnedValue)Qt::ConnectionType 是如何对应的?

【问题讨论】:

【参考方案1】:

look again at the documentationinvokeMethod 有多个重载,其中一个用于:

bool QMetaObject::invokeMethod ( QObject * obj, const char * member, 
               QGenericReturnArgument ret, 
               QGenericArgument val0 = QGenericArgument( 0 ), 
               QGenericArgument val1 = QGenericArgument(), 
               QGenericArgument val2 = QGenericArgument(), 
               QGenericArgument val3 = QGenericArgument(), 
               QGenericArgument val4 = QGenericArgument(), 
               QGenericArgument val5 = QGenericArgument(), 
               QGenericArgument val6 = QGenericArgument(), 
               QGenericArgument val7 = QGenericArgument(), 
               QGenericArgument val8 = QGenericArgument(), 
               QGenericArgument val9 = QGenericArgument() ) [static]

所以调用者不需要指定连接类型和/或关心返回参数

【讨论】:

啊!他们使用了不同的重载函数。谢谢。

以上是关于理解 QMetaObject :: invokeMethod 的参数 - QtQuick的主要内容,如果未能解决你的问题,请参考以下文章

QMetaObject::invokeMethod 不调用槽

为啥从线程执行方法时使用 QMetaObject::invokeMethod

使用 QT 支持构建 OpenCV 时未解析的符号 QMetaObject

QMetaObject 的 QAbstractItemModel,我必须自己写吗?

如何使用QMetaObject :: activate发出信号

Qt 静态函数QMetaObject::connectSlotsByName(QObject * object)