DiagramDesigner/source/monitorItemsDlg.cpp

168 lines
5.6 KiB
C++
Raw Normal View History

2025-11-14 19:31:09 +08:00
#include "monitorItemsDlg.h"
#include "ui_monitorItemsDlg.h"
#include "dataBase.h"
#include <QToolTip>
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<monitorRelationItem> 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<QPair<QString,QUuid>> 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<QPair<QString,QUuid>> 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<QPair<QString,QUuid>> 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);
}*/
}