#ifndef DATASOURCEDLG_H #define DATASOURCEDLG_H /*********运行时数据源选则*********/ #include QT_BEGIN_NAMESPACE namespace Ui { class dataSourceDlg; } QT_END_NAMESPACE class QStandardItemModel; class QStandardItem; struct ExtraProperty; class StructDataSource; class ExtraPropertyManager; class DataSourceDlg : public QDialog { Q_OBJECT public: DataSourceDlg(QWidget *parent = nullptr); ~DataSourceDlg(); void initial(); void loadData(); void setExtraPropertyManager(ExtraPropertyManager* p) {_pExtraProManager = p;} void showDlg(); public slots: void onOkClicked(); void onCancelClicked(); void onTreeSelectionChanged(const QModelIndex& current, const QModelIndex& previous); void addItemToView(const ExtraProperty& property, const QString& displayMode, // "name" 或 "tag" QStandardItem* root, QStandardItem* pItem); private: void clearItems(); void clearPropertyList(); void loadCategoryProperties(QStandardItem* categoryItem); QVector getCategoryPropertiesFromDataManager(const QVariantMap& categoryData); void updatePropertyList(QVector); bool expandToPropertyByCode(const QString& propertyCode,const QString& displayMode); //根据编码展开到属性节点 bool expandToNodeByNames(QStandardItem* rootItem,const QStringList& nodeNames); //根据已知名称展开到对应节点 private: Ui::dataSourceDlg *ui; QStandardItemModel* _treeModel; QStandardItem* m_currentCategoryItem; //当前操作对象 ExtraPropertyManager* _pExtraProManager; //使用外部的manager StructDataSource* m_dataSource; }; #endif