Lenidoxll
Новичок
Offline
Сообщений: 11
|
|
« : Февраль 21, 2021, 12:29 » |
|
Добрый день! Хочу реализовать график, который изменяет свой вид с течением времени. Так сказать, не статический, а динамический. Пока что додумался до трех способов: 1. В классе есть вектор QVector<double> key, value. Каждый раз, когда срабатывает timeout таймера, вызывается слот, в котором к векторам через append добавляется новый элемент. При этом у нас есть только один график и он просто каждый раз перерисовывается. Таким образом, у нас график как бы ползет. Плюс этого способа, как мне кажется, это то, что то, что уже нарисовано, остается таким, какое оно есть и после перерисовки. Минус - затрата памяти и времени, ведь для этого постоянно приходится увеличивать массив элементов, то есть наши вектора. 2. У нас нет начальных вектором аргумента и значения, зато в слоте у нас создается каждый раз два новых вектора, состоящих из двух элементов - первый элемент это последний элемент в предыдущем вызове, а второй элемент - кончик новой части графика, так сказать, которая после отрисовки появится на экране. При этом эти вектора загружаются в каждый раз технически новый график. В итоге, реально график рисуется кусочно. Плюс, вроде как, что не приходится каждый раз меня размер массивов, минус - "ершистость" графика. 3. Создаем в классе два вектора на два значения (предположим, что мы рисует просто линейный график). Первое значение - реальная начальная точка. А второе значение всегда разное. Так как у нас график рисуется через прямые, проходящие через контрольные точки, за счет того, что вторая точка каждый раз разная, наш график визуально изменяется и вместе с тем не приходится меня размер массивов. Мы просто удаляем последний (второй) элемент и добавляем новый. Ну, и перерисовываем. Однако, во-первых, график как бы скочет туда сюда из-за таких перерисовок (совсем чуть-чуть, но все же), а во-вторых, оно так удобно пока функция линейная.
В связи с этим вопрос: как все-таки лучше рисовать графики изменяющиеся во времени, чтобы при этом был минимум затрат памяти и времени на перерисовку?
P.S.: если объяснено непонятно и надо выложить код - напишите в комменте. Изначально решил не выкладывать, чтобы не делать сообщение слишком большим.
|