#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 QPropertyHandle; struct DataSourceType; class QListWidgetItem; class DataSourceDlg : public QDialog { Q_OBJECT public: DataSourceDlg(QWidget *parent = nullptr); ~DataSourceDlg(); void initial(); void loadData(); void showDlg(DataSourceType); DataSourceType getCurData(); signals: void listWidgetUpdated(); public slots: void onOkClicked(); void onCancelClicked(); void onTreeSelectionChanged(const QModelIndex& current, const QModelIndex& previous); void onListWidgetClicked(QListWidgetItem*); void addItemToView(const ExtraProperty& property, const QString& displayMode, // "name" 或 "tag" QStandardItem* root, QStandardItem* pItem); private: QString getLevelType(int index); void clearItems(); void clearPropertyList(); void loadCategoryProperties(QStandardItem* categoryItem); QVector getCategoryPropertiesFromDataManager(const QVariantMap& categoryData); void updateCategoryProperties(QStandardItem* categoryItem,const ExtraProperty& property); // 更新category节点的属性列表 QStandardItem* processGroupLevel(QStandardItem* componentItem,const ExtraProperty& property); // 处理group层级 void processCategoryLevel(QStandardItem* groupItem,const ExtraProperty& property); // 处理category层级 void updatePropertyList(QVector); void expandToNodeByCode(const QString& code,QStandardItemModel* model); //根据属性code展开树到指定节点 void selectListItemByCode(const QString& code); //在listWidget中选中指定code的项 QStandardItem* findCategoryNodeByPropertyCode(QStandardItem* item, const QString& code); private: Ui::dataSourceDlg *ui; QStandardItemModel* _treeModel; QStandardItem* m_currentCategoryItem; //当前操作对象 ExtraPropertyManager* _pExtraProManager; //使用外部的manager StructDataSource* m_dataSource; QListWidgetItem* _curProperty; //当前属性 QString m_targetPropertyCode; //打开的目标code }; #endif