我有一个与表现相关的问题。我想从结构的C ++侧向量传递到qml侧,其中向量包含大约3000个元素和结构14个元素。基本上我可以创建14个容器,例如QVariantLists填充数据并调用4个函数(例如QObject :: invokeMethod)来传递该数据。我也可以调用QObject :: invokeMethod 3000次,我只传递QVariantList,那么在这种情况下最好的解决方案是什么?
答案 0 :(得分:0)
我不知道你的用例是什么,但你可以一次传递所有数据,作为数组的数组:
<强> C ++ 强>
QVariantList list;
for(int i = 0;i < 10;i ++) {
QList<int> sublist;
sublist.append(i * 1);
sublist.append(i * 2);
sublist.append(i * 3);
list.append(QVariant::fromValue(sublist));
}
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
QObject *root = engine.rootObjects().first();
QMetaObject::invokeMethod(root, "printArrays", Qt::DirectConnection,
Q_ARG(QVariant, QVariant::fromValue(list)));
QML (main.qml)
Window {
width: 200
height: 200
visible: true
function printArrays(arr)
{
for (var i = 0; i < arr.length; i++) {
var subarr = arr[i];
for (var j = 0; j < subarr.length; j++) {
console.info(subarr[j]);
}
}
}
}
至于性能,我认为传递QVariant
中包含的数据根本没有效率。相反,您可以使用C ++创建一些代理对象,并使用setContextProperty
或qmlRegisterType
将其公开给QML。