Я использую «VXYModelMapper» и «QStandardItemModel» в диаграмме.Я использую коды ударов, но добавление модели в VXYModelMapper выполняется очень медленно.
VXYModelMapper {
model: myChartClass.newMyChartModel
series: lineSeries
xColumn: 0
yColumn: 1
}
void MyChartClass::setMyChartModel(QStandardItemModel *model)
{
newMyChartModel= model;
emit myChartModelChanged(model);
}
QStandardItemModel* lineModel=new QStandardItemModel(npcArray.size(), 2);
foreach(const QJsonValue & val, npcArray){
double xVal=val.toObject().value("x").toDouble();
double yVal=val.toObject().value("y").toDouble();
QStandardItem *item1 = new QStandardItem(QString::number(xVal));
lineModel->setItem(i, 0, item1);
QStandardItem *item2 = new QStandardItem(QString::number(yVal));
lineModel->setItem(i, 1, item2);
i+=1;
}
//To this line everything is very good and fast
QElapsedTimer timer;
timer.start();
myChartClass->setMyChartModel(lineModel);
qDebug() << "The slow operation took" << timer.elapsed() << "millisecond";
Вывод: Медленная операция заняла 123045 миллисекунду.Общее количество очков: 5188
Это очень медленно: (
Обновление : я использую QTimer, но не получаю пользу.: (
lineModel=new QStandardItemModel(0, 2);
myChartClass->setMyChartModel(lineModel);
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(30);
void MyChartClass::update(){
int toIndex=fromIndex+100;
if(toIndex>=npcArray.size()){
toIndex=npcArray.size()-1;
}
for(int i=fromIndex;i<toIndex;i++){
double xVal=npcArray[i].toObject().value("x").toDouble();
double yVal=npcArray[i].toObject().value("y").toDouble();
QStandardItem *item1 = new QStandardItem(QString::number(xVal));
lineModel->setItem(i, 0, item1);
QStandardItem *item2 = new QStandardItem(QString::number(yVal));
lineModel->setItem(i, 1, item2);
}
fromIndex=toIndex;
}