EnergySpectrumAnalyer/src/CustomQwtPlot.h

74 lines
2.1 KiB
C
Raw Normal View History

#ifndef CUSTOMQWTPLOT_H
#define CUSTOMQWTPLOT_H
2026-03-12 20:23:55 +08:00
#include <QMap>
#include <QwtPlot>
#include <QwtPlotPanner>
#include <QwtPlotMagnifier>
class QwtPlotCurve;
2026-03-12 20:23:55 +08:00
class QwtPlotMarker;
class QwtPlotZoneItem;
class CustomQwtPlot : public QwtPlot
{
public:
explicit CustomQwtPlot(QWidget* parent = nullptr);
void SetEventFilterFunc(std::function<bool(QObject*, QEvent*)> event_filter_func);
void SetXaxisDragScale(bool enable);
void ResetPlot();
2026-03-12 20:23:55 +08:00
QwtPlotCurve* GetCurve(const QString& curve_name);
QList<QwtPlotCurve*> GetCurveList() const;
void AddCurve(QwtPlotCurve* curve);
2026-03-12 20:23:55 +08:00
QwtPlotMarker* GetMarker(const QString& marker_name, const QString& postion);
QList<QwtPlotMarker*> GetMarkerList() const;
void AddMarker(QwtPlotMarker *marker, const QString &marker_name, const QString &postion);
void RemoveMarker(const QString& marker_name, const QString& postion);
void CleanMarkers();
QwtPlotZoneItem* GetZoneItem(const QString& zone_item_name);
QList<QwtPlotZoneItem*> GetZoneItemList() const;
void AddZoneItem(QwtPlotZoneItem *zone_item, const QString &zone_item_name);
void RemoveZoneItem(const QString& zone_item_name);
void CleanZoneItems();
protected:
bool eventFilter(QObject *obj, QEvent *event) override;
virtual void showEvent(QShowEvent *event) override;
private:
double _init_x_min = 0, _init_x_max = 10;
double _init_y_min = 0, _init_y_max = 10;
bool _is_dragging = false;
QPoint _last_pos;
std::function<bool(QObject*, QEvent*)> _event_filter_func = nullptr;
private:
2026-03-12 20:23:55 +08:00
QMap<QString, QwtPlotCurve*> _curves;
QMap<QString, QMap<QString, QwtPlotMarker*> > _markers;
QMap<QString, QwtPlotZoneItem*> _zone_items;
};
class CustomQwtPlotXaxisPanner : public QwtPlotPanner
{
public:
CustomQwtPlotXaxisPanner(QWidget *canvas);
protected:
virtual void moveCanvas(int dx, int dy) override;
};
class CustomQwtPlotXaxisMagnifier : public QwtPlotMagnifier
{
public:
CustomQwtPlotXaxisMagnifier(QWidget *canvas);
protected:
virtual void rescale(double factor) override;
};
2026-03-12 20:23:55 +08:00
QColor getDistinctColorForManyCurves(int curve_index);
#endif // CUSTOMQWTPLOT_H