以下是invokeMethod function的文档。如何在invokeMethod函数中传递列表,向量或数组作为参数
所以,如果我传递一个字符串或QString类型作为参数,那么它的作品。但是是否有可能将QString的列表,矢量或数组作为参数传递?
P.S:参数必须是一种QGenericArgument,我必须使用Q_ARG宏来创建QGenericArgument对象。
以下是invokeMethod function的文档。如何在invokeMethod函数中传递列表,向量或数组作为参数
所以,如果我传递一个字符串或QString类型作为参数,那么它的作品。但是是否有可能将QString的列表,矢量或数组作为参数传递?
P.S:参数必须是一种QGenericArgument,我必须使用Q_ARG宏来创建QGenericArgument对象。
我发现以下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])
}
是的。您必须注册该类型,以便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));
感谢的InvokeMethod功能的工作!我该如何处理findLongest函数中的QStringList值?我该如何让函数知道它是一种QStringList(在QML中)? – OnurA
@OnurA我还没有使用过QML。通常被调用的方法是'invokable'或一个槽。在这个例子中,它很可能看起来像这样:'QString findLongest(QStringList list);' –