#include "monitorItemsDlg.h" #include "ui_monitorItemsDlg.h" #include "dataBase.h" #include MonitorItemsDlg::MonitorItemsDlg(QWidget *parent) : QDialog(parent) , ui(new Ui::monitorItemsDlg) ,_modelAll(nullptr) ,_modelSelect(nullptr) { ui->setupUi(this); initial(); } MonitorItemsDlg::~MonitorItemsDlg() { delete ui; } void MonitorItemsDlg::initial() { _modelAll = new QStandardItemModel(this); ui->treeView_all->setModel(_modelAll); ui->treeView_all->setHeaderHidden(true); _modelSelect = new QStandardItemModel(this); ui->treeView_select->setModel(_modelSelect); ui->treeView_select->setHeaderHidden(true); ui->le_name->setPlaceholderText("输入名称"); connect(ui->btn_generate,&QPushButton::clicked,this,&MonitorItemsDlg::onGenerateClicked); connect(_modelAll, &QStandardItemModel::itemChanged,this, &MonitorItemsDlg::onItemChanged); } void MonitorItemsDlg::onUpdateItems(QList lst,bool refresh) { if(refresh){ QStandardItem *root = _modelAll->invisibleRootItem(); int rowCount = root->rowCount(); if (rowCount > 0) { _modelAll->removeRows(0, rowCount); } } for(auto &info:lst){ auto curItem = info.item; if(curItem.nCategory == 0){ if(curItem.nEquipType == 1 || curItem.nEquipType == 15 || curItem.nEquipType == 16){ //母线与变压器等间隔外设备并列第一层 QStandardItem *pItem = new QStandardItem(curItem.sName); pItem->setCheckable(true); // 启用勾选框 pItem->setCheckState(Qt::Unchecked); pItem->setData(curItem.nCategory,Qt::UserRole+1); pItem->setData(curItem.nEquipType,Qt::UserRole+2); pItem->setData(curItem.uid,Qt::UserRole+3); for(auto& subInfo:info.subList){ //母线挂接间隔,变压器挂接设备 QStandardItem *pSub = new QStandardItem(subInfo.sName); pSub->setCheckable(true); // 启用勾选框 pSub->setCheckState(Qt::Unchecked); pSub->setData(subInfo.nCategory,Qt::UserRole+1); pSub->setData(subInfo.nEquipType,Qt::UserRole+2); pSub->setData(subInfo.uid,Qt::UserRole+3); pItem->appendRow(pSub); } _modelAll->appendRow(pItem); } else{ //其他设备挂接在母线下的间隔中 if(!info.parent.sName.isEmpty()){ //有父,在间隔内 QStandardItem *pItem = new QStandardItem(curItem.sName); pItem->setCheckable(true); // 启用勾选框 pItem->setCheckState(Qt::Unchecked); pItem->setData(curItem.nCategory,Qt::UserRole+1); pItem->setData(curItem.nEquipType,Qt::UserRole+2); pItem->setData(curItem.uid,Qt::UserRole+3); auto pParent = findStandardItemAtLevel(_modelAll,1,info.parent.sName,nullptr,0); //查找父间隔所在item if(pParent){ pParent->appendRow(pItem); } } } } } ui->treeView_all->expandAll(); } void MonitorItemsDlg::onSelectItems(QList> lst) { ui->stackedWidget->setCurrentIndex(0); /*resetSelect(); for(auto& info:lst){ for(int i = 0;i < ui->listWidget_all->count();++i){ QListWidgetItem *item = ui->listWidget_all->item(i); QUuid uid = item->data(Qt::UserRole).toUuid(); if(uid == info.second){ //设置选中 item->setCheckState(Qt::Checked); continue; } } }*/ } void MonitorItemsDlg::onGenerateClicked() { QString sName = ui->le_name->text(); if (sName.isEmpty()) { ui->le_name->setFocus(); return; } /*QList> lst; for (int i = 0; i < ui->listWidget_all->count(); ++i) { QListWidgetItem *item = ui->listWidget_all->item(i); // 处理每个项 if(item->checkState() == Qt::Checked){ QString text = item->text(); QUuid uid = item->data(Qt::UserRole).toUuid(); lst.append(qMakePair(text,uid)); } } emit generateMonitor(sName,lst);*/ } void MonitorItemsDlg::onMonitorCreated(QList> lst) { /*ui->stackedWidget->setCurrentIndex(1); ui->listWidget_select->clear(); for(auto& pair:lst){ QListWidgetItem *item = new QListWidgetItem(pair.first); item->setData(Qt::UserRole,pair.second); ui->listWidget_select->addItem(item); }*/ } void MonitorItemsDlg::onItemChanged(QStandardItem *item) { QSignalBlocker blocker(_modelAll); if (item->isCheckable()) { Qt::CheckState newState = item->checkState(); // 设置所有子项与父项相同的状态 setChildrenCheckState(item, newState); } ui->treeView_all->repaint(); } void MonitorItemsDlg::setChildrenCheckState(QStandardItem *parent, Qt::CheckState state) { for (int row = 0; row < parent->rowCount(); ++row) { QStandardItem *child = parent->child(row, 0); // 第一列 if (child && child->isCheckable()) { child->setCheckState(state); setChildrenCheckState(child, state); } } } void MonitorItemsDlg::resetSelect() { /*for(int i = 0;i < ui->listWidget_all->count();++i){ QListWidgetItem *item = ui->listWidget_all->item(i); item->setCheckState(Qt::Unchecked); }*/ }