Название: QChart Отправлено: sektor от Март 14, 2017, 17:13 Хочу реализовать простую программу (график ось х время, ось У числа). Есть виджет с кнопкой и ввод числа. Хочу при нажатии на кнопку, чтобы число в dublespinbox добавилась на ось У а на ось Ч время.
Код: #include "chart.h" Название: Re: QChart Отправлено: Пантер от Март 14, 2017, 21:15 Ты спросить что-то хотел или так, поделиться?
Название: Re: QChart Отправлено: sektor от Март 15, 2017, 07:46 Конечно спросить ;) мой код не работает. Как это реализовать ? Если я использую не врямя по оси X а точки то все получается с времененм ничего не получается
Название: Re: QChart Отправлено: VPS от Март 15, 2017, 11:58 Можно попробовать расширять диапазон по осям, например так:
Код: void MainWindow::on_pushButton_clicked() Если же диапазон максимальных и минимальных значений по осям не будет изменяться, то можно использовать сигнально-слотовое соединение в конструкторе: Код: connect(series, SIGNAL(pointAdded(int)), chartView, SLOT(update())); Название: Re: QChart Отправлено: sektor от Март 15, 2017, 16:49 спасибо получилось без сигналов. Я думал он автоматом масштабирует. Дрогой вопрос допустим я хочу только 10 точек отобразить на графике, то есть при добавлении 11 первая удаляется и все сдвигаются тем самым на графике только 10 последних значений. Чтобы это реализовать нужно все вручную делать? перезаписывать QPoin или же можно функцией scroll воспользоваться. Будет ли утечка памяти ?
Название: Re: QChart Отправлено: ViTech от Март 15, 2017, 17:17 Будет ли утечка памяти? Я пробовал двигать с помощью axisX->setRange(), правда не знаю, насколько это правильно. И после нескольких таких "движений" вывод графика начинает дико тормозить. А QChart, похоже, и без посторонней помощи течёт: QCharts Memory Leak (https://bugreports.qt.io/browse/QTBUG-58802) :). Название: Re: QChart Отправлено: sektor от Март 16, 2017, 13:42 Движение как показано в примере нужно осуществлять функцией scroll (QChart ) как я понял.
Название: Re: QChart Отправлено: ViTech от Март 16, 2017, 14:24 Да, с помощью QChart::scroll() тоже двигается график. Но отжирание памяти и тормоза так же накапливаются как и при axisX->setRange(). Даже при пустой координатной сетке, без отображения данных.
Название: Re: QChart Отправлено: sektor от Март 16, 2017, 17:18 Ты не решил проблему с утечкой памяти? Наверное оно возникает при добавление в QLineSerias записей. МОжет попробовать replace Qpoint делать ?
Название: Re: QChart Отправлено: ViTech от Март 16, 2017, 21:12 В пользовательском коде нечему течь. Или я чего-то не знаю :).
Код
Если после запуска приложения быстро елозить мышкой график влево-вправо, то секунд через 20-30 будут заметны подтормаживания, а через минуту и того хлеще. Это особенно заметно, если рядом запустить свежий экземпляр приложения и там график подвигать. Ну и в какой-нить утилите по мониторингу приложений видно, что память отжирается и не освобождается. Название: Re: QChart Отправлено: sektor от Март 16, 2017, 21:32 я собираю 100 точек на графике с интервалом 5 сек. После того как добавятся все 100 точек на график я начинаю сдвигать график, то есть всегда на графике последнее 100 точек. Так вот, я в диспетчере задач смотрю память она растет и растет не знаю что делать ???.
Название: Re: QChart Отправлено: VPS от Март 16, 2017, 21:40 я собираю 100 точек на графике с интервалом 5 сек. После того как добавятся все 100 точек на график я начинаю сдвигать график, то есть всегда на графике последнее 100 точек. Так вот, я в диспетчере задач смотрю память она растет и растет не знаю что делать ???. Вы при этом удаляете точки, которые не отображаются на графике из QLineSeries?Название: Re: QChart Отправлено: sektor от Март 16, 2017, 21:51 Цитировать Вы при этом удаляете точки, которые не отображаются на графике из QLineSeries? нет не удаляю. Про скройлинге они не удаляются ?Название: Re: QChart Отправлено: VPS от Март 16, 2017, 22:07 Цитировать Вы при этом удаляете точки, которые не отображаются на графике из QLineSeries? нет не удаляю. Про скройлинге они не удаляются ?Название: Re: QChart Отправлено: sektor от Март 16, 2017, 22:46 посмотрите пример Dynamic Spline Example, там вроде ничего не удаляется
Название: Re: QChart Отправлено: VPS от Март 16, 2017, 23:47 Можете проверить выводом количества точек в серии: int QXYSeries::count() const (http://doc.qt.io/qt-5/qxyseries.html#count)
Название: Re: QChart Отправлено: sektor от Март 17, 2017, 13:49 maxPoint =50 точек. Я даже сделал так, чтобы после 50 точек программа перезаписывала точки. int QXYSeries::count() const показывает 50 но память все жрет и через 5 мин программу жутко тормозит.
Код: bool ChartMonitoring::setData(QString name, float data) Название: Re: QChart Отправлено: ViTech от Март 17, 2017, 14:52 При каждом QXYSeries::replace(int index, const QPointF &newPoint) испускается сигнал QXYSeries::pointReplaced(int index), т.е. при каждом перезаписывании всех точек таких сигналов получается порядка 50, что производительности не добавляет. Лучше делать QXYSeries::remove() первой точки, и новую добавлять с помощью QXYSeries::append(). И соответственно оси двигать.
Но полагаю, что течёт и тормозит где-то во внутренностях QChart (https://bugreports.qt.io/browse/QTBUG-58802). Когда это исправят - не известно... Зато можно приделать "some ‘wow’-effect" и наслаждаться Glowing Qt Charts (http://blog.qt.io/blog/2017/02/07/glowing-qt-charts/) :). Название: Re: QChart Отправлено: sektor от Март 17, 2017, 15:49 Сделал как вы говорили удалять точки потом добавлять, никаких изменений :'(
Название: Re: QChart Отправлено: sektor от Март 17, 2017, 16:18 Да че тут говорить, посмотрите пример dinamicspline, память жрет :) после 400 сек у меня тормоза начинаются
Название: Re: QChart Отправлено: ViTech от Март 17, 2017, 16:19 В QCharts Memory Leak (https://bugreports.qt.io/browse/QTBUG-58802) пишут, что вроде помогает удалить из графика серию, создать новую и добавить её в график. Такой вот костыль. Хотя не удивлюсь, что тормозить будет если даже не добавлять в график никаких серий. У меня есть подозрения, что течёт и тормозит QChart просто с осями, в частности с QDateTimeAxis.
|