![Виталий Антипов](/media/cache/b1/81/b181418a02bf4c43ec80abbc5baeb255.webp)
Виталий АнтиповJan. 16, 2018, 4:57 a.m.
ChartView. Отображение метки данных точки серии при наведении курсора
Добрый день! Подскажите, как отобразить метки данных точки в LineSeries при наведении курсора? Из документации понял, что перехватить событие наведения можно через onHovered(), но как получить индекс/позицию/значение нужной точки?
ChartView { id: chartIzmerHh objectName: "chartIzmerHh" property int count property var array_dateX property var array_valueY property var array_valueY1 property var array_valueY2 visible: true anchors.top: rec_filter.bottom anchors.left: parent.left anchors.right: parent.right anchors.bottom: parent.bottom antialiasing: true legend.visible: false title: "Средняя вибрация на холостом ходу" ValueAxis { id: axiY min: 0 } DateTimeAxis { id: axiX format: "dd-MM-yyyy" min: rec_filter.date_begin max: rec_filter.date_end } LineSeries { id: line1 property bool myBool: false color: "lightgreen" axisY: axiY axisX: axiX width: 5 onHovered: { // ??? } } LineSeries { id: line2 color: "tomato" axisY: axiY axisX: axiX width: 5 } LineSeries { id: line color: "#03a9f5" axisY: axiY axisX: axiX width: 5 } Component.onCompleted: { var xx = [] var yy = [] var yy1 = [] var yy2 = [] var max = 0 for(var i=0;i<count;i++){ xx[i] = Date.parse(array_dateX[i]) yy[i] = Number(array_valueY[i]) yy1[i] = Number(array_valueY1[i]) yy2[i] = Number(array_valueY2[i]) if(yy[i]>max){ max = yy[i] } if(yy1[i]>max){ max = yy1[i] } if(yy2[i]>max){ max = yy2[i] } line.append(xx[i], yy[i]) line1.append(xx[i], yy1[i]) line2.append(xx[i], yy2[i]) } max = Math.round(max) + 1 axiY.max = max } }
![We recommend hosting TIMEWEB](/media/technical_storage/timeweb-120-90.jpg)
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.Do you like it? Share on social networks!
Lz
- Liza zhegalova
- June 24, 2024, 12:40 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:70points,
- Rating points1
ВМ
- Вета Миличенкова
- June 23, 2024, 6:25 p.m.
C++ - Test 001. The first program and data types
- Result:80points,
- Rating points4
Last comments
Qt Linux - Lesson 001. Autorun Qt application under Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Lesson 007. Working with ICMP Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий КононенкоFeb. 5, 2024, 12:50 p.m.
![EVA](/media/cache/4b/62/4b6257bdb5dfaf404a6571a1ba7910ef.webp)
EVADec. 25, 2023, 9:30 p.m.
Boost - static linking in CMake project under Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
Qt/C++ - Lesson 056. Connecting the Boost library in Qt for MinGW and MSVC compilers Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Now discuss on the forum
![BlinCT](/media/cache/ae/4a/ae4a65663ccbf14aec7b31a6df3f29a6.webp)
BlinCTJune 25, 2024, 11 a.m.
![Evgenii Legotckoi](/media/cache/5a/49/5a499b0c8eb5e79957fec0aea35e5d98.webp)
Evgenii LegotckoiJune 25, 2024, 1:11 a.m.
![BlinCT](/media/cache/ae/4a/ae4a65663ccbf14aec7b31a6df3f29a6.webp)
BlinCTMay 5, 2024, 3:46 p.m.
![Evgenii Legotckoi](/media/cache/5a/49/5a499b0c8eb5e79957fec0aea35e5d98.webp)
Evgenii LegotckoiMay 3, 2024, 12:07 a.m.
![IscanderChe](/media/cache/c6/bd/c6bd48d511a45551f81980d558b60c04.webp)
IscanderCheApril 30, 2024, 2:22 p.m.
Добрый день!
Обработчик onHovered навешивается автоматически на сигнал hovered.
true
, and when the mouse moves away again, it turnsfalse
.Спасибо, тоже нашел и получил значения благодаря point.x и point.y. Отформатировал значение даты и вывел искомые значения в прямоугольник. Теперь столкнулся с проблемой перемещения прямоугольника к курсору мыши при срабатывании onHovered(). Использовать MouseArea и брать оттуда mouseX и mouseY не вариант, так как MouseArea перекроет LineSeries и события onHovered никогда не получим. Подскажите, есть какие-нибудь варианты решить проблему?
Пока мыслей нет, но попробуйте всё-таки MouseArea. Дело в том, что у неё есть свойство propagateComposedEvents , которое по умолчанию установлено на false , а если его установить на true, то события должны передаваться на объекты, которые перекрываются этой самой MouseArea.
Спасибо, попробую! Тут еще вариант придумал - создать ScatterSeries и при onHovered создать точку с требуемыми координатами. Попробовал scatter.append(point.x, point.y) - получается очень красиво. Только надо изучить как ее заменять на новую и как форматировать значения pointLabels
У ScatterSeries есть методы
Спасибо за ответ! Кстати, propagateComposedEvents: true не дает получить событие onHovered .
Если честно у меня пока только одна идиотская идея есть. Брать по таймеру текущую позицию курсора глобально из C++ специальным классом. И этот класс будет зарегистрирован в QML, у него будет сигнал, который будет высылать информацию о положении курсора, что позволит обновлять информацию так, как вам будет нужно (используя конечно манипуляции с мапингом глобальных координат в координаты графика).
Спасибо большущее за советы! Все получилось через ScatterSeries. Методы remove() как-то сходу не дались, удаляет в первый раз, а потом программа падает... Не стал тратить время и воспользовался методом replace(). Все идеально, работает шустро! Еще раз спасибо!