如何在invokeMethod函数中传递列表,向量或数组作为参数

时间:2016-03-02 14:24:17

标签: c++ arrays qt vector qml

以下是invokeMethod function的文档。

因此,如果我将字符串或QString类型作为参数传递,那么它可以工作。但是可以传递QString的列表,向量或数组作为参数吗?

P.S:参数必须是一种QGenericArgument,我必须使用Q_ARG宏来创建QGenericArgument对象。

2 个答案:

答案 0 :(得分:3)

是。您必须注册该类型,以便Qt可以正确处理它。

关于如何注册类型请参阅 qRegisterMetaTypeQ_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])
}