@@ -21,8 +21,7 | |||
|
21 | 21 | \note Since QtCommercial Charts utilizes Qt Graphics View Framework for drawing, it works best |
|
22 | 22 | with QtQuick 1, which is based on the same framework. |
|
23 | 23 | As of release 1.3.0, QtCommercial Charts is also usable with QtQuick 2, though the performance |
|
24 | is slightly worse than with QtQuick 1. Also, hovered and clicked signals of series do not work | |
|
25 | with QtQuick 2. | |
|
24 | is slightly worse than with QtQuick 1 due to additional rendering step that is required. | |
|
26 | 25 | |
|
27 | 26 | \raw HTML |
|
28 | 27 | <table cellpadding="2" cellspacing="1" border="0" width="95%" class="indextable"> |
@@ -41,6 +41,12 | |||
|
41 | 41 | #include "qdatetimeaxis.h" |
|
42 | 42 | #endif |
|
43 | 43 | |
|
44 | #ifdef CHARTS_FOR_QUICK2 | |
|
45 | #include <QGraphicsSceneMouseEvent> | |
|
46 | #include <QGraphicsSceneHoverEvent> | |
|
47 | #include <QApplication> | |
|
48 | #endif | |
|
49 | ||
|
44 | 50 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
45 | 51 | |
|
46 | 52 | /*! |
@@ -261,6 +267,9 void DeclarativeChart::initChart(QChart::ChartType type) | |||
|
261 | 267 | setAntialiasing(QQuickItem::antialiasing()); |
|
262 | 268 | connect(m_scene, SIGNAL(changed(QList<QRectF>)), this, SLOT(update())); |
|
263 | 269 | connect(this, SIGNAL(antialiasingChanged(bool)), this, SLOT(handleAntialiasingChanged(bool))); |
|
270 | ||
|
271 | setAcceptedMouseButtons(Qt::AllButtons); | |
|
272 | setAcceptHoverEvents(true); | |
|
264 | 273 | #else |
|
265 | 274 | if (type == QChart::ChartTypePolar) |
|
266 | 275 | m_chart = new QPolarChart(this); |
@@ -386,7 +395,6 void DeclarativeChart::handleAxisYRightSet(QAbstractAxis *axis) | |||
|
386 | 395 | |
|
387 | 396 | void DeclarativeChart::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) |
|
388 | 397 | { |
|
389 | // qDebug() << "DeclarativeChart::geometryChanged" << newGeometry.width() << newGeometry.height(); | |
|
390 | 398 | if (newGeometry.isValid()) { |
|
391 | 399 | if (newGeometry.width() > 0 && newGeometry.height() > 0) { |
|
392 | 400 | m_chart->resize(newGeometry.width(), newGeometry.height()); |
@@ -407,6 +415,78 void DeclarativeChart::paint(QPainter *painter) | |||
|
407 | 415 | m_scene->render(painter, renderRect, renderRect); |
|
408 | 416 | } |
|
409 | 417 | |
|
418 | void DeclarativeChart::mousePressEvent(QMouseEvent *event) | |
|
419 | { | |
|
420 | m_mousePressScenePoint = event->pos(); | |
|
421 | m_mousePressScreenPoint = event->globalPos(); | |
|
422 | m_lastMouseMoveScenePoint = m_mousePressScenePoint; | |
|
423 | m_lastMouseMoveScreenPoint = m_mousePressScreenPoint; | |
|
424 | m_mousePressButton = event->button(); | |
|
425 | m_mousePressButtons = event->buttons(); | |
|
426 | ||
|
427 | QGraphicsSceneMouseEvent mouseEvent(QEvent::GraphicsSceneMousePress); | |
|
428 | mouseEvent.setWidget(0); | |
|
429 | mouseEvent.setButtonDownScenePos(m_mousePressButton, m_mousePressScenePoint); | |
|
430 | mouseEvent.setButtonDownScreenPos(m_mousePressButton, m_mousePressScreenPoint); | |
|
431 | mouseEvent.setScenePos(m_mousePressScenePoint); | |
|
432 | mouseEvent.setScreenPos(m_mousePressScreenPoint); | |
|
433 | mouseEvent.setLastScenePos(m_lastMouseMoveScenePoint); | |
|
434 | mouseEvent.setLastScreenPos(m_lastMouseMoveScreenPoint); | |
|
435 | mouseEvent.setButtons(m_mousePressButtons); | |
|
436 | mouseEvent.setButton(m_mousePressButton); | |
|
437 | mouseEvent.setModifiers(event->modifiers()); | |
|
438 | mouseEvent.setAccepted(false); | |
|
439 | ||
|
440 | QApplication::sendEvent(m_scene, &mouseEvent); | |
|
441 | } | |
|
442 | ||
|
443 | void DeclarativeChart::mouseReleaseEvent(QMouseEvent *event) | |
|
444 | { | |
|
445 | QGraphicsSceneMouseEvent mouseEvent(QEvent::GraphicsSceneMouseRelease); | |
|
446 | mouseEvent.setWidget(0); | |
|
447 | mouseEvent.setButtonDownScenePos(m_mousePressButton, m_mousePressScenePoint); | |
|
448 | mouseEvent.setButtonDownScreenPos(m_mousePressButton, m_mousePressScreenPoint); | |
|
449 | mouseEvent.setScenePos(event->pos()); | |
|
450 | mouseEvent.setScreenPos(event->globalPos()); | |
|
451 | mouseEvent.setLastScenePos(m_lastMouseMoveScenePoint); | |
|
452 | mouseEvent.setLastScreenPos(m_lastMouseMoveScreenPoint); | |
|
453 | mouseEvent.setButtons(event->buttons()); | |
|
454 | mouseEvent.setButton(event->button()); | |
|
455 | mouseEvent.setModifiers(event->modifiers()); | |
|
456 | mouseEvent.setAccepted(false); | |
|
457 | ||
|
458 | QApplication::sendEvent(m_scene, &mouseEvent); | |
|
459 | ||
|
460 | m_mousePressButtons = event->buttons(); | |
|
461 | m_mousePressButton = Qt::NoButton; | |
|
462 | } | |
|
463 | ||
|
464 | void DeclarativeChart::hoverMoveEvent(QHoverEvent *event) | |
|
465 | { | |
|
466 | // Convert hover move to mouse move, since we don't seem to get actual mouse move events. | |
|
467 | // QGraphicsScene generates hover events from mouse move events, so we don't need | |
|
468 | // to pass hover events there. | |
|
469 | QGraphicsSceneMouseEvent mouseEvent(QEvent::GraphicsSceneMouseMove); | |
|
470 | mouseEvent.setWidget(0); | |
|
471 | mouseEvent.setButtonDownScenePos(m_mousePressButton, m_mousePressScenePoint); | |
|
472 | mouseEvent.setButtonDownScreenPos(m_mousePressButton, m_mousePressScreenPoint); | |
|
473 | mouseEvent.setScenePos(event->pos()); | |
|
474 | // Hover events do not have global pos in them, and the screen position doesn't seem to | |
|
475 | // matter anyway in this use case, so just pass event pos instead of trying to | |
|
476 | // calculate the real screen position. | |
|
477 | mouseEvent.setScreenPos(event->pos()); | |
|
478 | mouseEvent.setLastScenePos(m_lastMouseMoveScenePoint); | |
|
479 | mouseEvent.setLastScreenPos(m_lastMouseMoveScreenPoint); | |
|
480 | mouseEvent.setButtons(m_mousePressButtons); | |
|
481 | mouseEvent.setButton(m_mousePressButton); | |
|
482 | mouseEvent.setModifiers(event->modifiers()); | |
|
483 | m_lastMouseMoveScenePoint = mouseEvent.scenePos(); | |
|
484 | m_lastMouseMoveScreenPoint = mouseEvent.screenPos(); | |
|
485 | mouseEvent.setAccepted(false); | |
|
486 | ||
|
487 | QApplication::sendEvent(m_scene, &mouseEvent); | |
|
488 | } | |
|
489 | ||
|
410 | 490 | void DeclarativeChart::handleAntialiasingChanged(bool enable) |
|
411 | 491 | { |
|
412 | 492 | setAntialiasing(enable); |
@@ -111,6 +111,10 public: // From parent classes | |||
|
111 | 111 | void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry); |
|
112 | 112 | #ifdef CHARTS_FOR_QUICK2 |
|
113 | 113 | void paint(QPainter *painter); |
|
114 | protected: | |
|
115 | void mousePressEvent(QMouseEvent *event); | |
|
116 | void mouseReleaseEvent(QMouseEvent *event); | |
|
117 | void hoverMoveEvent(QHoverEvent *event); | |
|
114 | 118 | private Q_SLOTS: |
|
115 | 119 | void handleAntialiasingChanged(bool enable); |
|
116 | 120 | #endif |
@@ -198,6 +202,12 private: | |||
|
198 | 202 | QChart *m_chart; |
|
199 | 203 | #ifdef CHARTS_FOR_QUICK2 |
|
200 | 204 | QGraphicsScene *m_scene; |
|
205 | QPointF m_mousePressScenePoint; | |
|
206 | QPoint m_mousePressScreenPoint; | |
|
207 | QPointF m_lastMouseMoveScenePoint; | |
|
208 | QPoint m_lastMouseMoveScreenPoint; | |
|
209 | Qt::MouseButton m_mousePressButton; | |
|
210 | Qt::MouseButtons m_mousePressButtons; | |
|
201 | 211 | #endif |
|
202 | 212 | DeclarativeMargins *m_margins; |
|
203 | 213 | }; |
@@ -63,5 +63,6 ChartView { | |||
|
63 | 63 | XYPoint { x: 3.4; y: 2.0 } |
|
64 | 64 | XYPoint { x: 4.1; y: 2.3 } |
|
65 | 65 | onClicked: console.log(name + ".onClicked: " + point.x + ", " + point.y); |
|
66 | onHovered: console.log(name + ".onHovered: " + point.x + ", " + point.y); | |
|
66 | 67 | } |
|
67 | 68 | } |
@@ -41,6 +41,7 ChartView { | |||
|
41 | 41 | onVisibleChanged: console.log("scatterSeries.onVisibleChanged: " + visible); |
|
42 | 42 | onOpacityChanged: console.log(name + ".onOpacityChanged: " + opacity); |
|
43 | 43 | onClicked: console.log(name + ".onClicked: " + point.x + ", " + point.y); |
|
44 | onHovered: console.log(name + ".onHovered: " + point.x + ", " + point.y); | |
|
44 | 45 | onPointReplaced: console.log("scatterSeries.onPointReplaced: " + index); |
|
45 | 46 | onPointRemoved: console.log("scatterSeries.onPointRemoved: " + index); |
|
46 | 47 | onPointAdded: console.log("scatterSeries.onPointAdded: " + series.at(index).x + ", " + series.at(index).y); |
@@ -59,5 +60,6 ChartView { | |||
|
59 | 60 | XYPoint { x: 2.4; y: 2.7 } |
|
60 | 61 | XYPoint { x: 2.67; y: 2.65 } |
|
61 | 62 | onClicked: console.log(name + ".onClicked: " + point.x + ", " + point.y); |
|
63 | onHovered: console.log(name + ".onHovered: " + point.x + ", " + point.y); | |
|
62 | 64 | } |
|
63 | 65 | } |
@@ -42,6 +42,7 ChartView { | |||
|
42 | 42 | onVisibleChanged: console.log("splineSeries.onVisibleChanged: " + visible); |
|
43 | 43 | onOpacityChanged: console.log(name + ".onOpacityChanged: " + opacity); |
|
44 | 44 | onClicked: console.log(name + ".onClicked: " + point.x + ", " + point.y); |
|
45 | onHovered: console.log(name + ".onHovered: " + point.x + ", " + point.y); | |
|
45 | 46 | onPointReplaced: console.log("splineSeries.onPointReplaced: " + index); |
|
46 | 47 | onPointRemoved: console.log("splineSeries.onPointRemoved: " + index); |
|
47 | 48 | onPointAdded: console.log("splineSeries.onPointAdded: " + series.at(index).x + ", " + series.at(index).y); |
@@ -61,5 +62,6 ChartView { | |||
|
61 | 62 | XYPoint { x: 3.4; y: 2.0 } |
|
62 | 63 | XYPoint { x: 4.1; y: 2.3 } |
|
63 | 64 | onClicked: console.log(name + ".onClicked: " + point.x + ", " + point.y); |
|
65 | onHovered: console.log(name + ".onHovered: " + point.x + ", " + point.y); | |
|
64 | 66 | } |
|
65 | 67 | } |
General Comments 0
You need to be logged in to leave comments.
Login now