Russian Qt Forum
Март 25, 2017, 03:00 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: QChart  (Прочитано 752 раз)
vps
Самовар
**
Offline Offline

Сообщений: 189


Просмотр профиля
« Ответ #15 : Март 16, 2017, 23:47 »

Можете проверить выводом количества точек в серии: int QXYSeries::count() const
Записан

Qt4.8.7 / Qt5.7 / Java, Windows 7, https://bitbucket.org/vps2, https://github.com/vps2
sektor
Чайник
*
Offline Offline

Сообщений: 71


Просмотр профиля
« Ответ #16 : Март 17, 2017, 13:49 »

maxPoint =50 точек. Я даже сделал так, чтобы после 50 точек программа перезаписывала точки. int QXYSeries::count() const показывает 50 но память все жрет и через 5 мин программу жутко тормозит.
Код:
bool ChartMonitoring::setData(QString name, float data)
{
    QDateTime minX = axisXX->min();
    QDateTime maxX = axisXX->max();

    qreal minY = axisYY.value(name)->min();
    qreal maxY = axisYY.value(name)->max();

    QDateTime x = QDateTime::currentDateTime();
    qreal y = data;
    QPointF pointer;

     if(point.value(name)==maxPoint) {
        reng = maxX.toMSecsSinceEpoch()-minX.toMSecsSinceEpoch();
        //qDebug() <<reng;
     }

     if(point.value(name)>=maxPoint) {
         timeRenge.setMSecsSinceEpoch(x.toMSecsSinceEpoch()-reng);

         axisXX->setRange(timeRenge, x>maxX ? x : maxX);
         for(int i=0; i<maxPoint-1; i++){
            pointer = serias.value(name)->at(i+1);
            serias.value(name)->replace(i, pointer);
         }
         pointer.setX(x.toMSecsSinceEpoch());
         pointer.setY(y);
         serias.value(name)->replace(maxPoint-1, pointer);
     }
    else {
         axisXX->setRange(minX, x>maxX ? x : maxX);
         serias.value(name)->append(x.toMSecsSinceEpoch(), y);
         point[name]++;

     }

     qDebug() << serias.value(name)->count();
}


Записан
ViTech
Частый гость
***
Offline Offline

Сообщений: 264



Просмотр профиля
« Ответ #17 : Март 17, 2017, 14:52 »

При каждом QXYSeries::replace(int index, const QPointF &newPoint) испускается сигнал QXYSeries::pointReplaced(int index), т.е. при каждом перезаписывании всех точек таких сигналов получается порядка 50, что производительности не добавляет. Лучше делать QXYSeries::remove() первой точки, и новую добавлять с помощью QXYSeries::append(). И соответственно оси двигать.

Но полагаю, что течёт и тормозит где-то во внутренностях QChart. Когда это исправят - не известно... Зато можно приделать "some ‘wow’-effect" и наслаждаться Glowing Qt Charts Улыбающийся.
Записан

Пока сам не сделаешь...
sektor
Чайник
*
Offline Offline

Сообщений: 71


Просмотр профиля
« Ответ #18 : Март 17, 2017, 15:49 »

Сделал как вы говорили удалять точки потом добавлять, никаких изменений   Плачущий
Записан
sektor
Чайник
*
Offline Offline

Сообщений: 71


Просмотр профиля
« Ответ #19 : Март 17, 2017, 16:18 »

Да че тут говорить, посмотрите пример dinamicspline, память жрет  Улыбающийся после 400 сек у меня тормоза начинаются
Записан
ViTech
Частый гость
***
Offline Offline

Сообщений: 264



Просмотр профиля
« Ответ #20 : Март 17, 2017, 16:19 »

В QCharts Memory Leak пишут, что вроде помогает удалить из графика серию, создать новую и добавить её в график. Такой вот костыль. Хотя не удивлюсь, что тормозить будет если даже не добавлять в график никаких серий. У меня есть подозрения, что течёт и тормозит QChart просто с осями, в частности с QDateTimeAxis.
Записан

Пока сам не сделаешь...
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  

Страница сгенерирована за 0.074 секунд. Запросов: 22.