168 lines
5.6 KiB
C++
168 lines
5.6 KiB
C++
#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);
|
|
}*/
|
|
}
|