#ifndef TMRRELAYASSOCIATION_H #define TMRRELAYASSOCIATION_H #include #include #include #include "data_config.h" #include "config_mgr.h" #include //数据模型类 #include namespace Ui { class TMRRelayAssociation; } struct ExprNode { QString value; QList children; }; class DropTreeModel : public QStandardItemModel { public: using QStandardItemModel::QStandardItemModel; QStringList mimeTypes() const override { return { "application/x-custom" }; } bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override { if (!data->hasFormat("application/x-custom")) return false; QByteArray rawData = data->data("application/x-custom"); QString customText = QString::fromUtf8(rawData); QStandardItem *newItem = new QStandardItem(customText); newItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled); QStandardItem *parentItem = this->itemFromIndex(parent); if (!parentItem) parentItem = this->invisibleRootItem(); if (row < 0) parentItem->appendRow(newItem); else parentItem->insertRow(row, newItem); return true; } Qt::DropActions supportedDropActions() const override { return Qt::CopyAction; } }; class TMRRelayAssociation : public QDialog { Q_OBJECT public: explicit TMRRelayAssociation(int slot,int cardtype,QWidget *parent = nullptr); ~TMRRelayAssociation(); int slot_no; CardType car_type; private slots: void on_pushButton_cancel_clicked(); void on_pushButton_confirm_clicked(); void onComboBoxIndexChanged(int index); void OnButtonGroup(QAbstractButton *); void on_pushButton_and_clicked(); void on_pushButton_or_clicked(); void on_treeView_Relay_customContextMenuRequested(const QPoint &pos); void slotDeleteItem(); private: Ui::TMRRelayAssociation *ui; QButtonGroup * btnGroup_slot = nullptr; DraggableListWidget *list_widget_available = nullptr; int current_index; QTreeView *treeView_relay; QStandardItemModel *model_Relay; void Init(); void buildTreeFromExpression(QTreeView *treeView, const QString &expr); ExprNode* parseExpression(const QString& expr, int& pos); QStandardItem* buildItemTree(ExprNode* node); void setExpressionToTreeView(QTreeView* treeView, const QString& expr); QStandardItem* parseExpression(const QString &expr); QString buildLogicExpression(QStandardItem *item); }; #endif // TMRRELAYASSOCIATION_H