2016-03-02 163 views

回答

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]) 
} 
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)); 
+0

感谢的InvokeMethod功能的工作!我该如何处理findLongest函数中的QStringList值?我该如何让函数知道它是一种QStringList(在QML中)? – OnurA

+0

@OnurA我还没有使用过QML。通常被调用的方法是'invokable'或一个槽。在这个例子中,它很可能看起来像这样:'QString findLongest(QStringList list);' –

相关问题