smithchart data next to cursor
This commit is contained in:
parent
93bf7255c3
commit
4093578b62
@ -26,6 +26,13 @@ TracePlot::TracePlot(TraceModel &model, QWidget *parent)
|
|||||||
connect(&model, &TraceModel::SpanChanged, this, qOverload<double, double>(&TracePlot::updateSpan));
|
connect(&model, &TraceModel::SpanChanged, this, qOverload<double, double>(&TracePlot::updateSpan));
|
||||||
plots.insert(this);
|
plots.insert(this);
|
||||||
|
|
||||||
|
cursorLabel = new QLabel("Test", this);
|
||||||
|
cursorLabel->setStyleSheet("color: white;");
|
||||||
|
auto font = cursorLabel->font();
|
||||||
|
font.setPixelSize(12);
|
||||||
|
cursorLabel->setFont(font);
|
||||||
|
cursorLabel->hide();
|
||||||
|
setMouseTracking(true);
|
||||||
setAcceptDrops(true);
|
setAcceptDrops(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,6 +40,7 @@ TracePlot::~TracePlot()
|
|||||||
{
|
{
|
||||||
plots.erase(this);
|
plots.erase(this);
|
||||||
delete contextmenu;
|
delete contextmenu;
|
||||||
|
delete cursorLabel;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TracePlot::enableTrace(Trace *t, bool enabled)
|
void TracePlot::enableTrace(Trace *t, bool enabled)
|
||||||
@ -161,13 +169,36 @@ void TracePlot::mousePressEvent(QMouseEvent *event)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TracePlot::mouseReleaseEvent(QMouseEvent *event)
|
||||||
|
{
|
||||||
|
selectedMarker = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
void TracePlot::mouseMoveEvent(QMouseEvent *event)
|
void TracePlot::mouseMoveEvent(QMouseEvent *event)
|
||||||
{
|
{
|
||||||
if(selectedMarker) {
|
|
||||||
auto clickPoint = event->pos() - QPoint(marginLeft, marginTop);
|
auto clickPoint = event->pos() - QPoint(marginLeft, marginTop);
|
||||||
|
if(selectedMarker) {
|
||||||
auto trace = selectedMarker->getTrace();
|
auto trace = selectedMarker->getTrace();
|
||||||
selectedMarker->setPosition(nearestTracePoint(trace, clickPoint));
|
selectedMarker->setPosition(nearestTracePoint(trace, clickPoint));
|
||||||
|
cursorLabel->hide();
|
||||||
|
} else {
|
||||||
|
auto text = mouseText(clickPoint);
|
||||||
|
if(!text.isEmpty()) {
|
||||||
|
cursorLabel->setText(text);
|
||||||
|
cursorLabel->adjustSize();
|
||||||
|
cursorLabel->move(event->pos() + QPoint(15, 0));
|
||||||
|
cursorLabel->show();
|
||||||
|
} else {
|
||||||
|
cursorLabel->hide();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TracePlot::leaveEvent(QEvent *event)
|
||||||
|
{
|
||||||
|
Q_UNUSED(event);
|
||||||
|
cursorLabel->hide();
|
||||||
|
selectedMarker = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TracePlot::dragEnterEvent(QDragEnterEvent *event)
|
void TracePlot::dragEnterEvent(QDragEnterEvent *event)
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include <QContextMenuEvent>
|
#include <QContextMenuEvent>
|
||||||
#include <QTime>
|
#include <QTime>
|
||||||
|
#include <QLabel>
|
||||||
|
|
||||||
class TracePlot : public QWidget
|
class TracePlot : public QWidget
|
||||||
{
|
{
|
||||||
@ -43,13 +44,16 @@ protected:
|
|||||||
virtual QPoint markerToPixel(TraceMarker *m) = 0;
|
virtual QPoint markerToPixel(TraceMarker *m) = 0;
|
||||||
virtual double nearestTracePoint(Trace *t, QPoint pixel) = 0;
|
virtual double nearestTracePoint(Trace *t, QPoint pixel) = 0;
|
||||||
void mousePressEvent(QMouseEvent *event) override;
|
void mousePressEvent(QMouseEvent *event) override;
|
||||||
|
void mouseReleaseEvent(QMouseEvent *event) override;
|
||||||
void mouseMoveEvent(QMouseEvent *event) override;
|
void mouseMoveEvent(QMouseEvent *event) override;
|
||||||
|
void leaveEvent(QEvent *event) override;
|
||||||
|
|
||||||
// handle trace drops
|
// handle trace drops
|
||||||
void dragEnterEvent(QDragEnterEvent *event) override;
|
void dragEnterEvent(QDragEnterEvent *event) override;
|
||||||
void dropEvent(QDropEvent *event) override;
|
void dropEvent(QDropEvent *event) override;
|
||||||
void dragLeaveEvent(QDragLeaveEvent *event) override;
|
void dragLeaveEvent(QDragLeaveEvent *event) override;
|
||||||
virtual void traceDropped(Trace *t, QPoint position){ Q_UNUSED(t) Q_UNUSED(position)};
|
virtual void traceDropped(Trace *t, QPoint position){ Q_UNUSED(t) Q_UNUSED(position)};
|
||||||
|
virtual QString mouseText(QPoint pos) {Q_UNUSED(pos) return QString();};
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
void newTraceAvailable(Trace *t);
|
void newTraceAvailable(Trace *t);
|
||||||
@ -70,6 +74,8 @@ protected:
|
|||||||
QPoint dropPosition;
|
QPoint dropPosition;
|
||||||
Trace *dropTrace;
|
Trace *dropTrace;
|
||||||
|
|
||||||
|
QLabel *cursorLabel;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // TRACEPLOT_H
|
#endif // TRACEPLOT_H
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include "preferences.h"
|
#include "preferences.h"
|
||||||
#include "ui_smithchartdialog.h"
|
#include "ui_smithchartdialog.h"
|
||||||
|
#include "unit.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
@ -46,6 +47,12 @@ QPoint TraceSmithChart::dataToPixel(Trace::Data d)
|
|||||||
return transform.map(QPoint(d.S.real() * smithCoordMax, -d.S.imag() * smithCoordMax));
|
return transform.map(QPoint(d.S.real() * smithCoordMax, -d.S.imag() * smithCoordMax));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::complex<double> TraceSmithChart::pixelToData(QPoint p)
|
||||||
|
{
|
||||||
|
auto data = transform.inverted().map(QPointF(p));
|
||||||
|
return complex<double>(data.x() / smithCoordMax, -data.y() / smithCoordMax);
|
||||||
|
}
|
||||||
|
|
||||||
QPoint TraceSmithChart::markerToPixel(TraceMarker *m)
|
QPoint TraceSmithChart::markerToPixel(TraceMarker *m)
|
||||||
{
|
{
|
||||||
QPoint ret = QPoint();
|
QPoint ret = QPoint();
|
||||||
@ -194,6 +201,22 @@ void TraceSmithChart::traceDropped(Trace *t, QPoint position)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString TraceSmithChart::mouseText(QPoint pos)
|
||||||
|
{
|
||||||
|
auto data = pixelToData(pos);
|
||||||
|
if(abs(data) <= 1.0) {
|
||||||
|
data = 50.0 * (1-.0 + data) / (1.0 - data);
|
||||||
|
auto ret = Unit::ToString(data.real(), "", " ", 3);
|
||||||
|
if(data.imag() >= 0) {
|
||||||
|
ret += "+";
|
||||||
|
}
|
||||||
|
ret += Unit::ToString(data.imag(), "j", " ", 3);
|
||||||
|
return ret;
|
||||||
|
} else {
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//void TraceSmithChart::paintEvent(QPaintEvent * /* the event */)
|
//void TraceSmithChart::paintEvent(QPaintEvent * /* the event */)
|
||||||
//{
|
//{
|
||||||
// auto pref = Preferences::getInstance();
|
// auto pref = Preferences::getInstance();
|
||||||
|
@ -19,6 +19,7 @@ protected:
|
|||||||
static constexpr double smithCoordMax = 4096;
|
static constexpr double smithCoordMax = 4096;
|
||||||
|
|
||||||
QPoint dataToPixel(Trace::Data d);
|
QPoint dataToPixel(Trace::Data d);
|
||||||
|
std::complex<double> pixelToData(QPoint p);
|
||||||
QPoint markerToPixel(TraceMarker *m) override;
|
QPoint markerToPixel(TraceMarker *m) override;
|
||||||
double nearestTracePoint(Trace *t, QPoint pixel) override;
|
double nearestTracePoint(Trace *t, QPoint pixel) override;
|
||||||
|
|
||||||
@ -27,6 +28,7 @@ protected:
|
|||||||
bool supported(Trace *t) override;
|
bool supported(Trace *t) override;
|
||||||
virtual void draw(QPainter& painter) override;
|
virtual void draw(QPainter& painter) override;
|
||||||
virtual void traceDropped(Trace *t, QPoint position) override;
|
virtual void traceDropped(Trace *t, QPoint position) override;
|
||||||
|
QString mouseText(QPoint pos) override;
|
||||||
QPen textPen;
|
QPen textPen;
|
||||||
QPen chartLinesPen;
|
QPen chartLinesPen;
|
||||||
QPen thinPen;
|
QPen thinPen;
|
||||||
|
Loading…
Reference in New Issue
Block a user