42 / 52 / 33
Регистрация: 15.12.2015
Сообщений: 199
1

Изменение анимации qml lineseries

27.12.2017, 13:14. Показов 2546. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Уважаемые знатоки выручайте!
Пытаюсь делать динамический график изменения параметра во времени
(график в координатах напряжение - время). Обновляю график
каждую секунду по таймеру. Для lineseries включил анимацию:
animationOptions: ChartView.SeriesAnimations, т.к. без нее, на мой
взгляд обновление графика выглядит не очень красиво, но т.к.
мое приложение работает произвольное количество времени, то
мне нужно удалять точки из начала графика, иначе приложение
виснет. При удалении точек, с включенной анимацией,
график начинает моргать, мне данный эффект не подходит,
подскажите как можно убрать данное моргание графика.
Мой код:
Кликните здесь для просмотра всего текста

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import QtQuick 2.7
import QtCharts 2.1
 
ChartView {
    id: root
    width: 800
    height: 400
    title: "Test"
    antialiasing: true
    animationOptions: ChartView.SeriesAnimations
 
    property var min: new Date()
    property var max: new Date()
 
    property int counter: 0
    property int valueY: 0
 
    property point points: []
 
    function genRandValue() {
        return Math.random() * 120
    }
 
    function upVerticalRange(value) {
        if (axisY.max < value + 1) {
            axisY.max = Math.ceil((value + 1) / 10) * 10
        }
    }
 
    function update() {
        max = new Date()
        var s = root.series("test");
        var valueY = genRandValue();
        s.append(max, valueY)
        if (s.count > 11) {
            s.remove(0)
        }
        console.log(s.count)
 
        upVerticalRange(valueY);
 
        axisX.max = max
        min = max
        min.setSeconds(min.getSeconds() - 10)
        axisX.min = min
    }
 
    DateTimeAxis {
        id: axisX
        format: "hh:mm:ss"
        tickCount: 10
        titleText: "test"
    }
 
    ValueAxis {
        id: axisY
        tickCount: 6
        min: 0
        max: 0
        titleText: "test"
    }
 
    Component.onCompleted: {
        axisX.min = min
        axisX.max = new Date()
        var s = root.createSeries(
                ChartView.SerieTypeLine,
                "test", axisX, axisY)
        update();
    }
 
    Timer {
        interval: 1000; running: true; repeat: true
        onTriggered: {
            update()
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.12.2017, 13:14
Ответы с готовыми решениями:

Подсветка QML элементов QML-ного плагина в QtCreator в случае нахождения QML файлов плагина в ресурсах!
Здравствуйте! Если сделать плагин для QML и подключить его в основном проекте ну как - то так:...

Qml изменение свойств Rectangle из main.cpp
Здравствуйте, такой вопрос, допустим у меня есть файл main.qml, с таким вот кодом: import QtQuick...

QML, Andoid, самопроизвольное изменение размеров окна
Добрый день. Столкнулся с такой загадкой. Написал свою козу на лисапеде, то бишь диалог выбора...

QML - изменение содержимого формы по клику кнопки и виджета
Доброго дня всем!!! стоит задача - на qml написать прогу, где есть возможность изменения...

6
Заблокирован
27.12.2017, 14:02 2
нужно рисовать график самому, а не посредствам всяких забагованных chart view, сейчас пример найду, кому-то тут уже демки делал
1
Заблокирован
27.12.2017, 14:11 3
Лучший ответ Сообщение было отмечено dopleref как решение

Решение

Вот, нашёл. Посмотри как рисовать графики на QML
Вложения
Тип файла: rar DemoGraphics.rar (5.0 Кб, 46 просмотров)
1
42 / 52 / 33
Регистрация: 15.12.2015
Сообщений: 199
27.12.2017, 14:25  [ТС] 4
Digital_Cry,
Жесткая демка!
Спасибо за помощь буду разбираться!
Я использую qml, потому что полагаю что это проще,
но похоже в данной ситуации я действительно наткнулся на баг(
0
Заблокирован
27.12.2017, 17:49 5
Цитата Сообщение от dopleref Посмотреть сообщение
о похоже в данной ситуации я действительно наткнулся на баг
конечно, да и потом, их там не мало. Это ж какая-то фигня не особо к Qt относящаяся и особо не поддерживаемая... Точнее с недавних времён она входит в состав Qt, но она перекочевала туда из платной версии Qt, делалась на виджетах, потом портировалас на QML...
Цитата Сообщение от dopleref Посмотреть сообщение
Жесткая демка!

Цитата Сообщение от dopleref Посмотреть сообщение
Я использую qml, потому что полагаю что это проще,
конечно, на нём вообще всё в плане GUI проще делать, но всё же, рисовать графику лучше плюсами так сказать или на OpenGL и рисовать нужно в Item-е QML. В чистом QML для рисования есть только убогий canvas, там свои тонкости, да и баги есть...

Цитата Сообщение от dopleref Посмотреть сообщение
буду разбираться!
Там суть в чём:
1. Создаёшь класс, унаследованный от QQuickPaintedItem, реализуешь в нём чисто виртуальную функцию paint и рисуешь в ней через QPainter что угодно.
2. Для того, что бы этот класс был как бы Item-ом в QML, его нужно зарегистрировать в, как правило, main.cpp через qmlRegisterType<Renderer>("Demo", 1, 0, "Renderer") (не забываем заинклюдить его #include "renderer.h").
3. После этого, ты можешь использовать свой класс как графический элемент QML, то есть как обычный Item и применять к нему всю мощь QML, всякие анимации, таймеры и пр.. А, стоп, что бы QML код знал про твой зарегистрированный класс, тебе нужно его импортировать в QML, как и всё другое, то есть написать в QML в начале файла: import Demo 1.0
Всё.

Собственно, откуда все эти названия в ипорте и при регистрации... Смотри, функция qmlRegisterType в main.cpp принимает:
1. тип шаблона - <Render> - то есть твой класс.
2. 4 аргумента:
первый - название твоего QML плагина. В QML, всё, что импортируешь - называется плагинами.
второй - мажорная версия твоего плагина
третий - минорная версия твоего плагина
четвёртый - псевдо имя твоего класса, то есть алиас, то есть грубо говоря имя, которым ты в QML будешь называть свой класс, я обычно ставлю такое же, как и имя С++ класса.

По сути, все эти имена и версии ты можешь любые ставить, но обычно, имя плагина я ставлю одно для всех своих однотипны классов, что бы подключив в QML один плагин, мне все они сразу стали доступны... Версии - ой..это долгий разговор, ровно как и то, как сделать внешний стэндалон плагин и инсталлить его в Qt вместе с проектом, забей. Просто ставь любые версии, которые больше понравятся, например 1.0

Вот тебе вдогонку ещё одна демка, я тут на форуме их лепил всяким нубам, а толку ноль, всё равно они ничего не поняли, может хоть тебе пригодиться
Вложения
Тип файла: rar DemoChart.rar (5.0 Кб, 26 просмотров)
1
42 / 52 / 33
Регистрация: 15.12.2015
Сообщений: 199
28.12.2017, 09:02  [ТС] 6
Digital_Cry, Спасибо огромное,
за такое полное и подробное объяснение!
Разобрался с демками, теперь буду переделывать
под свою задачу.

Не по теме:

С наступающим новым годом!

0
Digital_Cry
28.12.2017, 10:56     Изменение анимации qml lineseries
  #7

Не по теме:

Цитата Сообщение от dopleref Посмотреть сообщение
С наступающим новым годом!
:senor:

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.12.2017, 10:56

Qml list model изменение свойств элементов из вне
Здравствуйте, перейду сразу к делу, есть примерно такой код: CheckBox{ id: checkAll ...

QML Изменение размера Rectangle в зависимости от длины текста
Имеется Rectangle и Text в нем: Rectangle{ id: surname_rate ...

QMl/QT при нажатии на кнопку должен окрыться другой qml файл
Додал anchors Вот что я сделал: import QtQuick 2.5 import QtQuick.Controls 1.4 ...

Как подключить QML-файл в C++ по моде, а также получить ссылки на QML-элементы в C++
Читал в интернете, как подключать QML-файлы. Кто-то использует QQmlView, кто-то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru