try to catch wheel event

This commit is contained in:
Jan Grewe 2018-09-05 18:10:34 +02:00
parent 1dd49f23f8
commit e65decc86a
7 changed files with 97 additions and 24 deletions

View File

@ -12,6 +12,9 @@ Chart::Chart(QGraphicsItem *parent, Qt::WindowFlags wFlags)
// They can only be grabbed here in the QGraphicsWidget (QChart). // They can only be grabbed here in the QGraphicsWidget (QChart).
grabGesture(Qt::PinchGesture); grabGesture(Qt::PinchGesture);
grabGesture(Qt::PanGesture); grabGesture(Qt::PanGesture);
setContentsMargins(0, 0, 0, 0);
setMargins(QMargins(0,0,0,0));
setBackgroundRoundness(0);
} }
Chart::~Chart() { Chart::~Chart() {
@ -21,6 +24,9 @@ Chart::~Chart() {
bool Chart::sceneEvent(QEvent *event) { bool Chart::sceneEvent(QEvent *event) {
if (event->type() == QEvent::Gesture) if (event->type() == QEvent::Gesture)
return gestureEvent(static_cast<QGestureEvent *>(event)); return gestureEvent(static_cast<QGestureEvent *>(event));
std::cerr << "chart: Wheel!";
std::cerr << (event->type()) << std::endl;
return QChart::event(event); return QChart::event(event);
} }
@ -38,6 +44,12 @@ bool Chart::gestureEvent(QGestureEvent *event) {
return true; return true;
} }
void Chart::wheelEvent(QGraphicsSceneWheelEvent *event) {
std::cerr << "chart: Wheel!";
QChart::wheelEvent(event);
}
void Chart::XRangeChanged(qreal min, qreal max) { void Chart::XRangeChanged(qreal min, qreal max) {
std::cerr << "XRangeChanged" << min << "\t"<< max << std::endl; std::cerr << "XRangeChanged" << min << "\t"<< max << std::endl;
if (series().at(0)->type() == QtCharts::QAbstractSeries::SeriesTypeLine) { if (series().at(0)->type() == QtCharts::QAbstractSeries::SeriesTypeLine) {

View File

@ -16,7 +16,7 @@ public:
explicit Chart(QGraphicsItem *parent = 0, Qt::WindowFlags wFlags = 0); explicit Chart(QGraphicsItem *parent = 0, Qt::WindowFlags wFlags = 0);
~Chart(); ~Chart();
protected: void wheelEvent(QGraphicsSceneWheelEvent *event);
bool sceneEvent(QEvent *event); bool sceneEvent(QEvent *event);
private: private:

View File

@ -1,12 +1,13 @@
#include "chartview.h" #include "chartview.h"
#include <QtGui/QMouseEvent> #include <QtGui/QMouseEvent>
#include <QScrollBar> #include <QScrollBar>
#include <iostream>
ChartView::ChartView(QChart *chart, QWidget *parent) : ChartView::ChartView(QChart *chart, QWidget *parent) :
QChartView(chart, parent), QChartView(chart, parent),
m_isTouching(false) m_isTouching(false)
{ {
setRubberBand(QChartView::RectangleRubberBand); setRubberBand(QChartView::RectangleRubberBand);
setContentsMargins(0,0,0,0);
} }
@ -23,12 +24,19 @@ bool ChartView::viewportEvent(QEvent *event)
// will only slow us down. // will only slow us down.
chart()->setAnimationOptions(QChart::NoAnimation); chart()->setAnimationOptions(QChart::NoAnimation);
} }
return QChartView::viewportEvent(event); return QChartView::viewportEvent(event);
} }
void ChartView::wheelEvent(QMouseEvent *event) {
std::cerr << "Mouse event" << std::endl;
std::cerr << event->type();
//QChartView::whwheelEvent(event);
}
void ChartView::mousePressEvent(QMouseEvent *event) void ChartView::mousePressEvent(QMouseEvent *event)
{ {
std::cerr << "MousePress" << std::endl;
if (m_isTouching) if (m_isTouching)
return; return;
QChartView::mousePressEvent(event); QChartView::mousePressEvent(event);

View File

@ -17,6 +17,7 @@ protected:
void mouseMoveEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event);
void keyPressEvent(QKeyEvent *event); void keyPressEvent(QKeyEvent *event);
void wheelEvent(QMouseEvent *event);
private: private:
bool m_isTouching; bool m_isTouching;

View File

@ -13,8 +13,9 @@ MultiChartView::MultiChartView(DataQueue *queue, QWidget *parent) :
xRangeMin = 0.0; xRangeMin = 0.0;
connect(dataQueue, SIGNAL(resultReady(QString)), this, SLOT(dataReady(QString))); connect(dataQueue, SIGNAL(resultReady(QString)), this, SLOT(dataReady(QString)));
//connect(&dataQueue, SIGNAL(finished()), &dataQueue, SLOT(deleteLater())); //connect(&dataQueue, SIGNAL(finished()), &dataQueue, SLOT(deleteLater()));
labelFont = QFont("Sans", 10);
tickLabelFont = QFont("Sans", 7);
setContentsMargins(QMargins(0,0,0,0));
} }
MultiChartView::~MultiChartView() MultiChartView::~MultiChartView()
@ -35,8 +36,6 @@ void MultiChartView::addArray(const nix::DataArray &array) {
while (dataQueue->isRunning()){ while (dataQueue->isRunning()){
// uncool!!! // uncool!!!
} }
this->arrayMap.insert(std::pair<std::string, nix::DataArray>(array.id(), array)); this->arrayMap.insert(std::pair<std::string, nix::DataArray>(array.id(), array));
ArrayInfo ai(array); ArrayInfo ai(array);
this->infoMap.insert(std::pair<std::string, ArrayInfo*>(ai.arrayid, &ai)); this->infoMap.insert(std::pair<std::string, ArrayInfo*>(ai.arrayid, &ai));
@ -61,10 +60,30 @@ void MultiChartView::addArray(const nix::DataArray &array) {
Chart* MultiChartView::createChart(const ArrayInfo &info) { Chart* MultiChartView::createChart(const ArrayInfo &info) {
Chart *chart = new Chart(); Chart *chart = new Chart();
chart->setTitle(QString::fromStdString(arrayMap.at(info.arrayid).name())); //chart->setTitle(QString::fromStdString(info.name));
chart->setToolTip(QString::fromStdString(info.name));
chart->legend()->hide(); chart->legend()->hide();
chart->createDefaultAxes(); chart->createDefaultAxes();
QValueAxis *axisY = new QValueAxis;
axisY->setTickCount(10);
axisY->applyNiceNumbers();
axisY->setTitleText(QString::fromStdString(info.ylabel));
axisY->setTitleFont(labelFont);
axisY->setLabelsFont(tickLabelFont);
chart->setAxisY(axisY);
QValueAxis *axisX = new QValueAxis;
axisX->setRange(info.xoffset, info.xmax);
axisX->setTickCount(10);
axisX->setLabelFormat("%.4f");
axisX->setTitleFont(labelFont);
axisX->setTitleText(QString::fromStdString(info.xlabel));
axisX->setLabelsFont(tickLabelFont);
axisX->applyNiceNumbers();
chart->setAxisX(axisX);
connect(axisX, SIGNAL(rangeChanged(qreal,qreal)), chart, SLOT(XRangeChanged(qreal,qreal)));
this->chartMap.insert(std::pair<std::string, Chart*>(info.arrayid, chart)); this->chartMap.insert(std::pair<std::string, Chart*>(info.arrayid, chart));
return chart; return chart;
} }
@ -73,6 +92,7 @@ ChartView* MultiChartView::createChartView(Chart *chart, const ArrayInfo &info)
ChartView *view = new ChartView(chart); ChartView *view = new ChartView(chart);
view->setLineWidth(1); view->setLineWidth(1);
view->setRenderHint(QPainter::Antialiasing); view->setRenderHint(QPainter::Antialiasing);
/* /*
QMargins margins = voltageChart->margins(); QMargins margins = voltageChart->margins();
int marg1 = margins.left(); int marg1 = margins.left();
@ -110,21 +130,15 @@ void MultiChartView::dataConverted(QLineSeries *series, QString entityId, double
series->setUseOpenGL(true); series->setUseOpenGL(true);
chart->addSeries(series); chart->addSeries(series);
QValueAxis *axisY = new QValueAxis; if (chart->axisX()->type() == QAbstractAxis::AxisTypeValue) {
QValueAxis *axisX = static_cast<QValueAxis*>(chart->axisX());
axisX->setRange(series->at(0).x(), series->at(series->count()-1).x());
}
if (chart->axisY()->type() == QAbstractAxis::AxisTypeValue) {
QValueAxis *axisY = static_cast<QValueAxis*>(chart->axisY());
double range = ymax - ymin; double range = ymax - ymin;
axisY->setRange(ymin - 0.2 * range, ymax + 0.2 * range); axisY->setRange(ymin - 0.2 * range, ymax + 0.2 * range);
axisY->setTickCount(10); }
axisY->applyNiceNumbers();
axisY->setTitleText("Test");
chart->setAxisY(axisY, series);
QValueAxis *axisX = new QValueAxis;
axisX->setRange(series->at(0).x(), series->at(series->count()-1).x());
axisX->setTickCount(10);
axisX->setLabelFormat("%.4f");
axisX->applyNiceNumbers();
chart->setAxisX(axisX, series);
connect(axisX, SIGNAL(rangeChanged(qreal,qreal)), chart, SLOT(XRangeChanged(qreal,qreal)));
QPen pen = series->pen(); QPen pen = series->pen();
pen.setWidth(1); pen.setWidth(1);

View File

@ -20,26 +20,38 @@ struct ArrayInfo {
xDim = guessBestXdim(array); xDim = guessBestXdim(array);
nix::Dimension d = array.getDimension(xDim); nix::Dimension d = array.getDimension(xDim);
dimType = d.dimensionType(); dimType = d.dimensionType();
xlabel = "";
if (dimType == nix::DimensionType::Sample) { if (dimType == nix::DimensionType::Sample) {
nix::SampledDimension sd = d.asSampledDimension(); nix::SampledDimension sd = d.asSampledDimension();
xoffset = sd.offset() ? *sd.offset() : 0.0; xoffset = sd.offset() ? *sd.offset() : 0.0;
sampleinterval = sd.samplingInterval(); sampleinterval = sd.samplingInterval();
xmax = dataExtent[xDim - 1] * sampleinterval + xoffset; xmax = dataExtent[xDim - 1] * sampleinterval + xoffset;
xlabel = sd.label() ? *sd.label() : "";
xlabel += sd.unit() ? " [" + *sd.unit() + "]" : "";
} else if (dimType == nix::DimensionType::Range) { } else if (dimType == nix::DimensionType::Range) {
nix::RangeDimension rd = d.asRangeDimension(); nix::RangeDimension rd = d.asRangeDimension();
tics = rd.ticks(); tics = rd.ticks();
xoffset = tics.front(); xoffset = tics.front();
xmax = tics.back(); xmax = tics.back();
sampleinterval = 0.0; sampleinterval = 0.0;
xlabel = rd.label() ? *rd.label() : "";
xlabel += rd.unit() ? " [" + *rd.unit() + "]" : "";
} else { // SetDimension } else { // SetDimension
xoffset = 0.0; xoffset = 0.0;
xmax = dataExtent[xDim - 1]; xmax = dataExtent[xDim - 1];
sampleinterval = 1.0; sampleinterval = 1.0;
} }
name = array.name();
ylabel = array.label() ? *array.label() : "";
ylabel += array.unit() ? " [" + *array.unit() + "]" : "";
} }
std::string arrayid; std::string arrayid;
std::string name;
std::string ylabel;
std::string xlabel;
int xDim; int xDim;
nix::DimensionType dimType; nix::DimensionType dimType;
double xoffset, xmax, sampleinterval; double xoffset, xmax, sampleinterval;
@ -101,6 +113,7 @@ private:
std::map<std::string, Chart*> chartMap; std::map<std::string, Chart*> chartMap;
std::map<std::string, ChartView*> viewMap; std::map<std::string, ChartView*> viewMap;
std::map<std::string, ArrayInfo*> infoMap; std::map<std::string, ArrayInfo*> infoMap;
QFont labelFont, tickLabelFont;
Chart* createChart(const ArrayInfo &info); Chart* createChart(const ArrayInfo &info);
ChartView* createChartView(Chart *chart, const ArrayInfo &info); ChartView* createChartView(Chart *chart, const ArrayInfo &info);

View File

@ -13,9 +13,34 @@
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string>Form</string>
</property> </property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item> <item>
<layout class="QVBoxLayout" name="vBox"/> <layout class="QVBoxLayout" name="vBox">
<property name="spacing">
<number>0</number>
</property>
</layout>
</item> </item>
<item> <item>
<widget class="QScrollBar" name="scrollBar"> <widget class="QScrollBar" name="scrollBar">