#ifndef STRUCTDATAPROPERTYMODEL_H #define STRUCTDATAPROPERTYMODEL_H /** * 结构预览ui的参量类型model * */ #include class StructDataSource; struct ExtraProperty; struct propertyStateInfo; class StructDataPropertyModel : public QAbstractTableModel { Q_OBJECT public: enum Columns { ColName = 0, ColTag = 1, ColCode = 2, ColSourceType = 3, ColConnectPara = 4, ColModelName = 5, ColDataType = 6, ColDefaultValue = 7, ColLengthPrecision = 8, ColumnCount }; StructDataPropertyModel(StructDataSource* dataManager, QObject* parent = nullptr); // 设置要显示的code列表 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; // 获取当前显示的code列表 QStringList getDisplayedCodes() const; // 根据code查找行 int findRowByCode(const QString& code) const; // 刷新指定code的行 void refreshRow(const QString& code); private slots: void onPropertyUpdated(const ExtraProperty& updatedProp, bool isNew); signals: void propertyModified(int row, const ExtraProperty& prop); private: ExtraProperty* getProperty(int displayRow) const; QVariant getPropertyData(const ExtraProperty& prop, int col) const; bool updatePropertyData(propertyStateInfo* data, int col, const QVariant& value); private: StructDataSource* m_dataManager = nullptr; QStringList m_propertyCodes; // 存储当前显示的属性code列表 }; #endif