#pragma once #include "iGuiPlot.h" #include "nmDefines.h" #include "nmPlot_global.h" class nmObjBase; // 数值试井绘图载体的样例 class NM_PLOT_EXPORT nmGuiPlot : public iGuiPlot { Q_OBJECT public: explicit nmGuiPlot(bool bUseBtn = true, QWidget *parent = 0); ~nmGuiPlot(); // 初始化UI virtual void initUI(QString sTitle, QSize szDefault = QSize(265, 203)); // 初始化Sheet void initSheets(); // 初始化布局 virtual void initMainLayout(); virtual QWidget* initChartLayout(QString sTitle, QSize szDefault); virtual void initChartView(QString sTitle, QSize szDefault); virtual void connectSignals(); // 刷新图形 virtual void runUpdate(); // Action命令执行 virtual bool runAction(QString sAction); // 创建添加一个Obj nmObjBase* appendOneObj(NM_Obj_Type o, QString& sName, QVector& vec); nmObjBase* _createOneObj(NM_Obj_Type o, QString& sName); // 绑定绘图对象的信号 void bindObjSignals(ZxObjBase* pObj); #ifdef QT_DEBUG /// @brief 刷新指定的绘图对象 /// @param sName 绘图对象名称 /// @param vecX 数据点 /// @param vecY 绘图对象名称 /// @param bPressureLike 压力模式还是流量模式,通常都是压力模式 /// @param bUseY2 是否启用第二y轴(右侧) /// @param bClearAll 刷新指定绘图对象时,是否把原有所有绘图对象清除 ZxObjBase* updatePlotObjBy(QString sName, \ VecFloat& vecX, VecFloat& vecY, \ bool bPressureLike = true, \ bool bUseY2 = false, \ bool bClearAll = false); #endif public slots: // Obj选择状态改变 void slotObjSelChanged(bool); // Obj数据发生了改变 void slotObjPtsChanged(); signals: // 绘图对象选择状态发生改变 void sigObjSelChanged(ZxObjBase*, bool); // 绘图对象数据点发生改变 void sigObjPtsChanged(ZxObjBase*); public: // 序列化 virtual void onSerialize(ZxSerializer* ser); virtual void onDeserialize(ZxSerializer* ser); // 反序列化后,把数据重新加入m_mapCurveData与m_mapCurveType virtual void resetAfterDeserialized(); protected: // 绘制Painter函数重载 virtual void paintEvent(QPaintEvent *); };