以下是invokeMethod function的文档。
因此,如果我将字符串或QString类型作为参数传递,那么它可以工作。但是可以传递QString的列表,向量或数组作为参数吗?
P.S:参数必须是一种QGenericArgument,我必须使用Q_ARG宏来创建QGenericArgument对象。
答案 0 :(得分:3)
是。您必须注册该类型,以便Qt可以正确处理它。
关于如何注册类型请参阅 qRegisterMetaType和 Q_DECLARE_METATYPE
Qt类型已经注册。所以通过例如通过Q_ARG的QStringlist根本不应该成为问题。
QString retVal;
QStringList values = QStringList() << "aaa" << "bb" << "cccc";
QMetaObject::invokeMethod(obj, "findLongest", Qt::DirectConnection,
Q_RETURN_ARG(QString, retVal),
Q_ARG(QStringList , values));
答案 1 :(得分:1)
我找到了以下documentation。您可以传递QVariantList,然后读取QML文件中的列表。
<强> C ++ 强>
QVariantList list;
list << 10 << QColor(Qt::green) << "bottles";
QMetaObject::invokeMethod(view.rootObject(), "readValues",
Q_ARG(QVariant, QVariant::fromValue(list)));
<强> QML:强>
function readValues(anArray) {
for (var i=0; i<anArray.length; i++)
console.log("Array item:", anArray[i])
}