У меня есть проблема со скоростью доступа к QList<qreal>
. я заявил:Как ускорить доступ к QList <qreal> подвергается воздействию C++ на QML
Q_PROPERTY(QList<qreal> circlePointsX READ circlePointsX NOTIFY circlePointsXChanged);
QList<qreal> circlePointsX(void) const
{
return mCirclePointsX;
}
и в QML файл, я сделал
pArea.circlesPointsX = paintAreaHelper.circlePointsX;
и после того, что некоторый код читает по пунктам:
var cPointsX = circlesPointsX;
var cPointsY = circlesPointsY;
var noOfPoints = circlesPointsX.length - 4;
for (var i = 0; i <= noOfPoints; i+=4)
{
ctx.moveTo(cPointsX[i], cPointsY[i]);
ctx.lineTo(cPointsX[i+1], cPointsY[i+1]);
ctx.lineTo(cPointsX[i+2], cPointsY[i+2]);
ctx.lineTo(cPointsX[i+3], cPointsY[i+3]);
ctx.lineTo(cPointsX[i], cPointsY[i]);
}
конечно тип собственности is var
property var circlesPointsX;@
и назначение:
var cPointsX = circlesPointsX;
не ускорит ничего, потому что это просто скопировать ссылку.
Я отлаживал его, и для каждого обращения к одному циклу вызывается метод C++. Я хотел бы скопировать данные из C++ один раз и получить доступ к нему из «локальной копии qml» вместо вызова C++ getter каждый раз.
Затем скопируйте его в переменную JS, находящуюся в «файле JS-кода» - доступ может стать быстрее (но имейте в виду, что vars в .js-файлах не подлежит никаким уведомлениям об изменениях и т. Д. - они являются простыми JS-данными). – mlvljr