#ifndef STRUCTDATAMEASUREMENTMODEL_H #define STRUCTDATAMEASUREMENTMODEL_H /** * 结构预览ui的量测类型model * */ #include class StructDataSource; struct MeasurementInfo; struct ExtraProperty; class StructDataMeasurementModel : public QAbstractTableModel { Q_OBJECT public: enum Columns { ColName = 0, ColTag = 1, ColCode = 2, ColSourceType = 3, ColConnectPara = 4, ColType = 5, ColSize = 6, ColSource = 7, ColStation = 8, ColEquipment = 9, ColChannel = 10, ColPacket = 11, ColOffset = 12, ColEnable = 13, //事件 ColCause = 14, //原因 ColCommand = 15, //动作 ColParameters = 16, //参数 ColumnCount }; StructDataMeasurementModel(StructDataSource* dataManager, QObject* parent = nullptr); void setPropertyCodes(const QStringList& codes); void setProperties(const QVector& properties); int rowCount(const QModelIndex& parent = QModelIndex()) const override; int columnCount(const QModelIndex& parent = QModelIndex()) const override; QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override; Qt::ItemFlags flags(const QModelIndex& index) const override; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; QVector getDisplayedProperties() const; QStringList getDisplayedCodes() const; int findRowByCode(const QString& code) const; void refreshRow(const QString& code); private slots: void onPropertyUpdated(const ExtraProperty& updatedProp, bool isNew); signals: void propertiesLoaded(int count); void propertyModified(int row, const ExtraProperty& prop); private: ExtraProperty* getProperty(int displayRow) const; QVariant getMeasurementData(const ExtraProperty& prop, int col, int role) const; bool updateMeasurementData(MeasurementInfo* data, int col, const QVariant& value,int role); QString getTypeText(int type) const; QString getSourceText(int source) const; int getSourceInt(QString) const; private: StructDataSource* m_dataManager = nullptr; QStringList m_propertyCodes; }; #endif