|
@@ -0,0 +1,121 @@
|
|
|
|
|
+#include "qabstractplot.h"
|
|
|
|
|
+
|
|
|
|
|
+QAbstractPlot::QAbstractPlot(QQuickItem *parent)
|
|
|
|
|
+ : QQuickPaintedItem(parent)
|
|
|
|
|
+ , m_pCustomPlot(new QCustomPlot())
|
|
|
|
|
+{
|
|
|
|
|
+ setFlag(QQuickItem::ItemHasContents, true);
|
|
|
|
|
+ setAcceptedMouseButtons(Qt::AllButtons);
|
|
|
|
|
+
|
|
|
|
|
+ connect(this, &QQuickPaintedItem::widthChanged, this, &QAbstractPlot::onPlotSizeChanged);
|
|
|
|
|
+ connect(this, &QQuickPaintedItem::heightChanged, this, &QAbstractPlot::onPlotSizeChanged);
|
|
|
|
|
+ connect(m_pCustomPlot, &QCustomPlot::afterReplot,
|
|
|
|
|
+ this, &QAbstractPlot::onPlotUpdate, Qt::UniqueConnection);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+QAbstractPlot::~QAbstractPlot()
|
|
|
|
|
+{
|
|
|
|
|
+ delete m_pCustomPlot;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+QCustomPlot *QAbstractPlot::customPlot()
|
|
|
|
|
+{
|
|
|
|
|
+ return m_pCustomPlot;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+void QAbstractPlot::setOpenGL(bool enabled)
|
|
|
|
|
+{
|
|
|
|
|
+ if(m_pCustomPlot)
|
|
|
|
|
+ {
|
|
|
|
|
+ m_pCustomPlot->setOpenGl(true, 4);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void QAbstractPlot::paint(QPainter *painter)
|
|
|
|
|
+{
|
|
|
|
|
+ if (!painter || !painter->isActive())
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
|
|
+ // m_pCustomPlot->setGeometry(0, 0, this->width(), this->height());
|
|
|
|
|
+ // painter->drawPixmap(0, 0, this->width(), this->height(), m_pCustomPlot->toPixmap());
|
|
|
|
|
+ QPixmap pixmap(boundingRect().size().toSize());
|
|
|
|
|
+ QCPPainter qcpPainter(&pixmap);
|
|
|
|
|
+ m_pCustomPlot->toPainter(&qcpPainter);
|
|
|
|
|
+ painter->drawPixmap(QPoint(), pixmap);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void QAbstractPlot::postMouseEvents(QMouseEvent *event)
|
|
|
|
|
+{
|
|
|
|
|
+ if(m_pCustomPlot)
|
|
|
|
|
+ {
|
|
|
|
|
+ QMouseEvent* newEvent = new QMouseEvent(event->type(), event->localPos(),
|
|
|
|
|
+ event->button(), event->buttons(),
|
|
|
|
|
+ event->modifiers());
|
|
|
|
|
+ QCoreApplication::postEvent(m_pCustomPlot, newEvent);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void QAbstractPlot::postWheelEvents(QWheelEvent *event)
|
|
|
|
|
+{
|
|
|
|
|
+ if(m_pCustomPlot)
|
|
|
|
|
+ {
|
|
|
|
|
+ // QWheelEvent* newEvent = new QWheelEvent(event->pos(),
|
|
|
|
|
+ // event->delta(),
|
|
|
|
|
+ // event->buttons(),
|
|
|
|
|
+ // event->modifiers(),
|
|
|
|
|
+ // event->orientation());
|
|
|
|
|
+
|
|
|
|
|
+ QWheelEvent* newEvent = new QWheelEvent(event->position(), event->globalPosition(),
|
|
|
|
|
+ event->pixelDelta(), event->angleDelta(),
|
|
|
|
|
+ event->buttons(), event->modifiers(),
|
|
|
|
|
+ event->phase(), event->inverted());
|
|
|
|
|
+ QCoreApplication::postEvent(m_pCustomPlot, newEvent);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void QAbstractPlot::mousePressEvent(QMouseEvent *event)
|
|
|
|
|
+{
|
|
|
|
|
+ this->postMouseEvents(event);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void QAbstractPlot::mouseReleaseEvent(QMouseEvent *event)
|
|
|
|
|
+{
|
|
|
|
|
+ this->postMouseEvents(event);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void QAbstractPlot::mouseMoveEvent(QMouseEvent *event)
|
|
|
|
|
+{
|
|
|
|
|
+ this->postMouseEvents(event);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void QAbstractPlot::mouseDoubleClickEvent(QMouseEvent *event)
|
|
|
|
|
+{
|
|
|
|
|
+ this->postMouseEvents(event);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void QAbstractPlot::wheelEvent(QWheelEvent *event)
|
|
|
|
|
+{
|
|
|
|
|
+ this->postWheelEvents(event);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void QAbstractPlot::onPlotSizeChanged()
|
|
|
|
|
+{
|
|
|
|
|
+ m_pCustomPlot->setGeometry(0, 0, (int)width(), (int)height());
|
|
|
|
|
+#if 0
|
|
|
|
|
+ QCPMarginGroup *marginGroup = new QCPMarginGroup(m_pCustomPlot);
|
|
|
|
|
+ m_pCustomPlot->axisRect()->setMarginGroup(QCP::msBottom|QCP::msTop, marginGroup);
|
|
|
|
|
+ m_pCustomPlot->axisRect()->setAutoMargins(QCP::msNone);
|
|
|
|
|
+ m_pCustomPlot->axisRect()->setMargins(QMargins(0, 0, 0, 0));
|
|
|
|
|
+ m_pCustomPlot->plotLayout()->setMargins(QMargins(0, 0, 0, 0));
|
|
|
|
|
+#endif
|
|
|
|
|
+ m_pCustomPlot->setViewport(QRect(0, 0, (int)width(), (int)height()));
|
|
|
|
|
+ m_pCustomPlot->axisRect()->setOuterRect(QRect(0, 0, (int)width(), (int)height()));
|
|
|
|
|
+ m_pCustomPlot->axisRect()->setMinimumMargins (QMargins(0, 0, 0, 0));
|
|
|
|
|
+ m_pCustomPlot->axisRect()->setMargins(QMargins(0, 0, 0, 0));
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void QAbstractPlot::onPlotUpdate()
|
|
|
|
|
+{
|
|
|
|
|
+ this->update();
|
|
|
|
|
+}
|