#include "WokingConditionConfig.h" #include "ui_WokingConditionConfig.h" #include #include #include #include CWokingConditionConfig::CWokingConditionConfig(QWidget *parent) : QWidget(parent), ui(new Ui::CWokingConditionConfig) { ui->setupUi(this); headerStr = QObject::tr("工况参数,范围下,范围上,百分比判断,波动判断,波动范围下,波动范围上"); model = new QStandardItemModel(ui->tableView); ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive); //ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); //选中行 QStringList headerList = headerStr.split(","); model->setHorizontalHeaderLabels(headerList); model->setColumnCount(headerList.size()); ui->tableView->setModel(model); ui->tableView->setAlternatingRowColors(true); ui->tableView->setColumnWidth(0, 200); //ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); //ui->tableView->horizontalHeader()->setSectionResizeMode(0,QHeaderView::ResizeToContents); ui->treeView->setContextMenuPolicy(Qt::CustomContextMenu); ui->treeView->setStyle(QStyleFactory::create("windows")); treeModel = new QStandardItemModel(ui->treeView); //创建模型指定父类 ui->treeView->setModel(treeModel); ui->treeView->setHeaderHidden(true); ui->comboBox_unitType->setView(new QListView()); this->setWindowTitle("工况逻辑配置"); m_Index = 0; QRegExp exp("[0-9\\.-]+$"); QValidator *Validator = new QRegExpValidator(exp); ui->lineEdit_Interval->setValidator(Validator); } CWokingConditionConfig::~CWokingConditionConfig() { delete ui; } QWidget *CWokingConditionConfig::CreateCombox(int flag) { if(flag == 0){ QComboBox* cmb = new QComboBox(); QStringList strList ; strList << "是" << "否"; cmb->addItems(strList); return cmb; }else if(flag == 1){ QComboBox* cmb = new QComboBox(); QStringList strList ; strList << "否" << "是"; cmb->addItems(strList); return cmb; } } QStandardItem* CWokingConditionConfig::add_checkBox_model(int flag) { QStandardItem *item = new QStandardItem(); item->setCheckable(true); if(!flag){ item->setCheckState(Qt::Unchecked); }else{ item->setCheckState(Qt::Checked); } //item->setEditable(false); return item; } void CWokingConditionConfig::\ InitConfig(int index,QString& strWorkConditionType,\ QStringList& strChannelName,WorkCondition_t& workCondition,\ QVector& workConditionChannels,QVector& WorkConditionInfo) { qDebug() << "InitConfig" <rowCount() ;i++){ treeModel->removeRow(i); } m_WorkConditionChannels = workConditionChannels; qDebug() << "m_WorkConditionChannels" << m_WorkConditionChannels.size() << endl; m_strChannelName.clear(); m_strChannelName = strChannelName; m_Index = index; qDebug() << m_strChannelName << endl; ui->lineEdit_workContion->setText(strWorkConditionType); ui->comboBox_unitType->clear(); ui->comboBox_unitType->addItem("请选择通道..."); ui->comboBox_unitType->addItems(m_strChannelName); if(WorkConditionInfo.size() > 0){ QStringList ChannelName; QString str = QString("%1").arg(workCondition.CheckWorkConditionInterval); ui->lineEdit_Interval->setText(str); ui->textEdit_Description->setText(workCondition.Description); for (int i = 0; i < WorkConditionInfo.size() ; i++) { model->setRowCount(i+1); if(WorkConditionInfo[i].EnRangeLower == "1") model->setItem(i, 1, add_checkBox_model(1)); else model->setItem(i, 1, add_checkBox_model()); if(WorkConditionInfo[i].EnRangeUpper == "1") model->setItem(i, 2, add_checkBox_model(1)); else model->setItem(i, 2, add_checkBox_model()); if(WorkConditionInfo[i].EnVolatilityRangeLower == "1") model->setItem(i, 5, add_checkBox_model(1)); else model->setItem(i, 5, add_checkBox_model()); if(WorkConditionInfo[i].EnVolatilityRangeUpper == "1") model->setItem(i, 6, add_checkBox_model(1)); else model->setItem(i, 6, add_checkBox_model()); model->setData(model->index(i,0,QModelIndex()),WorkConditionInfo[i].DisplayName); model->setData(model->index(i,1,QModelIndex()),WorkConditionInfo[i].LowerSideOfRange); model->setData(model->index(i,2,QModelIndex()),WorkConditionInfo[i].UpperSideOfRange); if(WorkConditionInfo[i].EnLowerSideOfRangePercent == "1"){ ui->tableView->setIndexWidget(model->index(i, 3), CreateCombox(0)); }else{ ui->tableView->setIndexWidget(model->index(i, 3), CreateCombox(1)); } if(WorkConditionInfo[i].EnableCheckVolatility == "1"){ ui->tableView->setIndexWidget(model->index(i, 4), CreateCombox(0)); }else{ ui->tableView->setIndexWidget(model->index(i, 4), CreateCombox(1)); } model->setData(model->index(i,5,QModelIndex()),WorkConditionInfo[i].LowerSideOfVolatilityRange); model->setData(model->index(i,6,QModelIndex()),WorkConditionInfo[i].UpperSideOfVolatilityRange); QJsonObject m_JsonObjWorkConditionRules; for (int j = 0; j < g_ChannelBaseInfo.size() ; j++) { if(WorkConditionInfo[i].ChannelName == g_ChannelBaseInfo[j].channelName){ m_JsonObjWorkConditionRules["BoardNo"] = g_ChannelBaseInfo[j].bordNo; m_JsonObjWorkConditionRules["ChannelName"] = g_ChannelBaseInfo[j].channelName; m_JsonObjWorkConditionRules["ChannelNoInBoard"] = g_ChannelBaseInfo[j].channelNoInBoard; } } m_JsonArrayWorkConditionRules.append(m_JsonObjWorkConditionRules); ChannelName.append(WorkConditionInfo[i].DisplayName); } QJsonDocument doc = QJsonDocument::fromJson(workCondition.WorkConditionJudgeLogicRules.toUtf8()); QJsonObject obj = doc.object(); QJsonObject WorkConditionJudgeLogicRulesObj = obj; if(WorkConditionJudgeLogicRulesObj.contains("logicAND")){ QJsonValue arrayValue = WorkConditionJudgeLogicRulesObj.value(QStringLiteral("logicAND")); if(arrayValue.isArray()){ QJsonArray array = arrayValue.toArray(); QString subprimaryTitle = "logicAND"; QList items1; QStandardItem* item1 = new QStandardItem(subprimaryTitle); treeModel->appendRow(item1); for (int i = 0; i < array.size(); i++) { QJsonObject tempObj2 = array[i].toObject(); if (tempObj2.contains(QStringLiteral("logicOR"))){ QJsonValue arrayValue = tempObj2.value(QStringLiteral("logicOR")); QStandardItem *itemOR = new QStandardItem(QString("logicOR")); item1->appendRow(itemOR); QJsonArray array = arrayValue.toArray(); for (int kk = 0; kk < array.size(); kk++) { QList items2; QStandardItem* item3 = new QStandardItem(array.at(kk)["DispalyName"].toString()); items2.append(item3); itemOR->appendRow(items2); } }else{ QList items2; QStandardItem* item3 = new QStandardItem(array.at(i)["DispalyName"].toString()); items2.append(item3); item1->appendRow(items2); } } }else { } } if(WorkConditionJudgeLogicRulesObj.contains("logicOR")){ QJsonValue arrayValue = WorkConditionJudgeLogicRulesObj.value(QStringLiteral("logicOR")); if(arrayValue.isArray()){ QJsonArray array = arrayValue.toArray(); QString subprimaryTitle = "logicOR"; QList items1; QStandardItem* item1 = new QStandardItem(subprimaryTitle); treeModel->appendRow(item1); for (int i = 0; i < array.size(); i++) { QJsonObject tempObj2 = array[i].toObject(); if (tempObj2.contains(QStringLiteral("logicAND"))){ QJsonValue arrayValue = tempObj2.value(QStringLiteral("logicAND")); QStandardItem *itemAnd = new QStandardItem(QString("logicAND")); item1->appendRow(itemAnd); QJsonArray array = arrayValue.toArray(); for (int kk = 0; kk < array.size(); kk++) { QList items2; QStandardItem* item3 = new QStandardItem(array.at(kk)["DispalyName"].toString()); items2.append(item3); itemAnd->appendRow(items2); } }else{ QList items2; QStandardItem* item3 = new QStandardItem(array.at(i)["DispalyName"].toString()); items2.append(item3); item1->appendRow(items2); } } }else { } } }else{ } QObject::connect(ui->tableView ,SIGNAL(customContextMenuRequested(const QPoint &)),this,SLOT(on_treeView_customContextMenuRequested(const QPoint &))); } void CWokingConditionConfig::on_pushButton_addUnit_clicked() { int rowCount = model->rowCount(); qDebug() << rowCount << endl; model->setRowCount(rowCount+1); ui->tableView->setIndexWidget(model->index(rowCount, 3), CreateCombox(1)); ui->tableView->setIndexWidget(model->index(rowCount, 4), CreateCombox(1)); model->setItem(rowCount, 1, add_checkBox_model()); model->setItem(rowCount, 2, add_checkBox_model()); model->setItem(rowCount, 5, add_checkBox_model()); model->setItem(rowCount, 6, add_checkBox_model()); model->setData(model->index(rowCount,0,QModelIndex()),""); model->setData(model->index(rowCount,1,QModelIndex()),""); model->setData(model->index(rowCount,2,QModelIndex()),""); model->setData(model->index(rowCount,5,QModelIndex()),""); model->setData(model->index(rowCount,6,QModelIndex()),""); } void CWokingConditionConfig::on_comboBox_unitType_currentTextChanged(const QString &arg1) { int row = ui-> tableView ->currentIndex().row();//获得当前行索引 QJsonObject m_JsonObjWorkConditionRules; int repetitionCount = 0; for (int i = 0; i < model->rowCount(); i++) { QModelIndex index = model->index(i,0); QString strData = model->data(index).toString(); if(strData.contains(arg1)){ repetitionCount++; } } if(repetitionCount > 0){ QString strChannelName = QString("%1%2").arg(repetitionCount).arg(arg1); model->setData(model->index(row,0,QModelIndex()),strChannelName); } else{ model->setData(model->index(row,0,QModelIndex()),arg1); } for (int i = 0; i < g_ChannelBaseInfo.size() ; i++) { if(arg1.contains(g_ChannelBaseInfo[i].channelName)){ m_JsonObjWorkConditionRules["BoardNo"] = g_ChannelBaseInfo[i].bordNo; m_JsonObjWorkConditionRules["ChannelName"] = g_ChannelBaseInfo[i].channelName; m_JsonObjWorkConditionRules["ChannelNoInBoard"] = g_ChannelBaseInfo[i].channelNoInBoard; m_JsonObjWorkConditionRules["DispalyName"] = arg1; } } m_JsonArrayWorkConditionRules.append(m_JsonObjWorkConditionRules); qDebug() << m_JsonArrayWorkConditionRules <treeView->currentIndex(); //QModelIndex index = curIndex.sibling(curIndex.row(),0); //同一行第一列元素的index if(curIndex.isValid()) { QStandardItem* item = treeModel->itemFromIndex(curIndex); QString text = item->text(); qDebug() << text <removeRow(curIndex.row(),curIndex.parent()); } } void CWokingConditionConfig::on_treeView_customContextMenuRequested(const QPoint &pos) { qDebug() << "on_treeView_customContextMenuRequested" <treeView->indexAt(pos); //当前点击的元素的index QModelIndex index = curIndex.sibling(curIndex.row(),0); //该行的第1列元素的index QMenu menu; if (index.isValid()) { //可获取元素的文本、data,进行其他判断处理 //QStandardItem* item = mModel->itemFromIndex(index); //QString text = item->text(); //QVariant data = item->data(Qt::UserRole + 1); //... //添加一行菜单,进行展开 menu.addAction(QStringLiteral("删除"), this, SLOT(slotDeleteItem())); menu.addSeparator(); //添加一个分隔线 //menu.addAction(QStringLiteral("增加"), this, SLOT(slotTreeMenuCollapse(bool))); } menu.exec(QCursor::pos()); //显示菜单 } void CWokingConditionConfig::on_pushButton_and_clicked() { QModelIndex index = ui->treeView->currentIndex(); if(index.isValid()) { QStandardItem* item = treeModel->itemFromIndex(index); QString subprimaryTitle = "logicAND"; QStandardItem* item1 = new QStandardItem(subprimaryTitle); item->appendRow(item1); }else{ QString subprimaryTitle = "logicAND"; QList items1; QStandardItem* item1 = new QStandardItem(subprimaryTitle); treeModel->appendRow(item1); } } void CWokingConditionConfig::on_pushButton_or_clicked() { QModelIndex index = ui->treeView->currentIndex(); qDebug() << index.row() <itemFromIndex(index); QString subprimaryTitle = "logicOR"; QStandardItem* item1 = new QStandardItem(subprimaryTitle); item->appendRow(item1); }else{ QString subprimaryTitle = "logicOR"; QList items1; QStandardItem* item1 = new QStandardItem(subprimaryTitle); treeModel->appendRow(item1); } } QJsonArray CWokingConditionConfig::GetItem(QStandardItem *item) { QJsonArray array; QJsonObject jsonObj; if(item->hasChildren()) { for(int i = 0;i < item->rowCount() ;i++) { QStandardItem * childitem = item->child(i); qDebug() << "childitem = " << childitem->text(); if(childitem->text() == "logicOR" || childitem->text() == "logicAND"){ QJsonObject jsonObjLogic; jsonObjLogic[childitem->text()] = GetItem(childitem); array.append(jsonObjLogic); }else{ for (int i = 0; i < m_ArrayWorkConditionRules.size() ; i++) { if(m_ArrayWorkConditionRules.at(i)["DispalyName"] == childitem->text()){ jsonObj["WC_NO"] = m_ArrayWorkConditionRules.at(i)["WC_NO"]; jsonObj["DispalyName"] = m_ArrayWorkConditionRules.at(i)["DispalyName"]; } } array.append(jsonObj); } } return array; } } void CWokingConditionConfig::on_pushButton_save_clicked() { if(treeModel->rowCount() < 1){ QMessageBox::information(this, QStringLiteral("提示"), QStringLiteral("请选择正确的组态逻辑")); return; } for(int i=0; i< m_ArrayWorkConditionRules.size(); i++) { m_ArrayWorkConditionRules.removeAt(i); } for (int i = 0; i < model->rowCount(); i++) { QJsonObject jsonObj; QStringList strDataList; for (int j = 0; j < model->columnCount(); j++) { QModelIndex index = model->index(i,j); QString strData = model->data(index).toString(); if(j == 0){ for (int ii = 0; ii < m_WorkConditionChannels.size();ii++ ) { //qDebug() <<"============="<< m_WorkConditionChannels[ii].ChannelName << strData << endl; if(strData.contains(m_WorkConditionChannels[ii].ChannelName) && m_WorkConditionChannels[ii].ChannelName != ""){ jsonObj["BoardNo"] = m_WorkConditionChannels[ii].BoardNo; jsonObj["ChannelName"] = m_WorkConditionChannels[ii].ChannelName; jsonObj["ChannelNoInBoard"] = m_WorkConditionChannels[ii].ChannelNoInBoard; jsonObj["WorkConditionChannelType"] = m_WorkConditionChannels[ii].WorkConditionChannelType; jsonObj["ChannelID"] = m_WorkConditionChannels[ii].channelID; jsonObj["DispalyName"] = strData; } } } if(j == 1){ QStandardItem *item = model->itemFromIndex(index); if(item->checkState() == Qt::Unchecked) jsonObj["EnRangeLower"] = false; else if(item->checkState() == Qt::Checked) jsonObj["EnRangeLower"] = true; jsonObj["LowerSideOfRange"] = model->data(index).toString(); } if(j == 2){ QStandardItem *item = model->itemFromIndex(index); if(item->checkState() == Qt::Unchecked) jsonObj["EnRangeUpper"] = false; else if(item->checkState() == Qt::Checked) jsonObj["EnRangeUpper"] = true; jsonObj["UpperSideOfRange"] = model->data(index).toString(); } if(j == 5){ QStandardItem *item = model->itemFromIndex(index); if(item->checkState() == Qt::Unchecked) jsonObj["EnVolatilityRangeLower"] = false; else if(item->checkState() == Qt::Checked) jsonObj["EnVolatilityRangeLower"] = true; jsonObj["LowerSideOfVolatilityRange"] = model->data(index).toString(); } if(j == 6){ QStandardItem *item = model->itemFromIndex(index); if(item->checkState() == Qt::Unchecked) jsonObj["EnVolatilityRangeUpper"] = false; else if(item->checkState() == Qt::Checked) jsonObj["EnVolatilityRangeUpper"] = true; jsonObj["UpperSideOfVolatilityRange"] = model->data(index).toString(); } if(j == 3){ QComboBox *comBox = (QComboBox*)(ui->tableView->indexWidget(index)); if(comBox->currentText() == "是"){ jsonObj["EnSideOfRangePercent"] = true; }else if(comBox->currentText() == "否"){ jsonObj["EnSideOfRangePercent"] = false; } } if(j == 4){ QComboBox *comBox = (QComboBox*)(ui->tableView->indexWidget(index)); if(comBox->currentText() == "是"){ jsonObj["EnableCheckVolatility"] = true; }else if(comBox->currentText() == "否"){ jsonObj["EnableCheckVolatility"] = false; } } } jsonObj["WC_NO"] = i+1; QString strTableName = "t_WorkConditionRules"; QString strWhere = QString(" SN = '%1' and ChannelId = '%2' and displayName = '%3' "). arg(m_Index).arg(jsonObj["ChannelID"].toString()).arg(jsonObj["DispalyName"].toString()); QString strSql = "count(*)"; int iRet = g_SqliteDB->QueryData(strTableName,strSql,strWhere); if(iRet > 0){ strSql = QString(" set EnLowerSideOfRangePercent = '%1',EnRangeUpper = '%2',EnRangeLower = '%3',EnVolatilityRangeUpper = '%4',EnVolatilityRangeLower = '%5',\ EnableCheckVolatility = '%6',LowerSideOfRange = '%7',UpperSideOfRange = '%8',LowerSideOfVolatilityRange = '%9',UpperSideOfVolatilityRange = '%10',WC_NO = %11 where SN = '%12' and ChannelId = '%13' and displayName = '%14'").arg(jsonObj["EnSideOfRangePercent"].toBool()).arg(jsonObj["EnRangeUpper"].toBool()).\ arg(jsonObj["EnRangeLower"].toBool()).arg(jsonObj["EnVolatilityRangeUpper"].toBool()).arg(jsonObj["EnVolatilityRangeLower"].toBool()).arg(jsonObj["EnableCheckVolatility"].toBool()).arg(jsonObj["LowerSideOfRange"].toString()).arg(jsonObj["UpperSideOfRange"].toString()).arg(jsonObj["LowerSideOfVolatilityRange"].toString()).arg(jsonObj["UpperSideOfVolatilityRange"].toString()).\ arg(i+1).arg(m_Index).arg(jsonObj["ChannelID"].toString()).arg(jsonObj["DispalyName"].toString()); g_SqliteDB->UpdateDataSql(strTableName,strSql); }else { strSql = QString(" values('%1',%2,'%3','%4','%5',%6,'%7','%8','%9','%10','%11','%12','%13','%14',%15,%16,%17,'%18');").arg(jsonObj["ChannelID"].toString()).arg(jsonObj["BoardNo"].toInt()).arg(jsonObj["ChannelName"].toString()).arg(jsonObj["ChannelNoInBoard"].toInt()).arg(jsonObj["EnSideOfRangePercent"].toBool()).\ arg(jsonObj["EnRangeUpper"].toBool()).arg(jsonObj["EnRangeLower"].toBool()).arg(jsonObj["EnVolatilityRangeUpper"].toBool()).arg(jsonObj["EnVolatilityRangeLower"].toBool()).arg(jsonObj["EnableCheckVolatility"].toBool()).arg(jsonObj["LowerSideOfRange"].toString()).\ arg(jsonObj["UpperSideOfRange"].toString()).arg(jsonObj["LowerSideOfVolatilityRange"].toString()).arg(jsonObj["UpperSideOfVolatilityRange"].toString()).arg(jsonObj["WorkConditionChannelType"].toInt()).arg(m_Index).arg(i+1).arg(jsonObj["DispalyName"].toString()); g_SqliteDB->InsertData(strTableName,strSql); } m_ArrayWorkConditionRules.append(jsonObj); } qDebug() << m_ArrayWorkConditionRules << endl; QJsonObject jsonObj2; for(int i = 0;i < treeModel->rowCount() ;i++) { QStandardItem *item = treeModel->item(i); qDebug() <<"item = " << item->text(); qDebug() << item->rowCount() << endl; jsonObj2[item->text()] = GetItem(item); } qDebug() << jsonObj2 << endl; QJsonObject WorkConditionsInfoObj; WorkConditionsInfoObj["WorkConditionJudgeLogicRules"] = jsonObj2; WorkConditionsInfoObj["WorkConditionRules"] = m_ArrayWorkConditionRules; QString str = QString("%1").arg(m_Index); WorkConditionsInfoObj["SN"] = str; WorkConditionsInfoObj["CheckWorkConditionInterval"] = ui->lineEdit_Interval->text().toInt(); WorkConditionsInfoObj["Description"] = ui->textEdit_Description->toPlainText(); // WorkConditionsInfoObj["Enable"] = m_WorkCondition.Enable; // WorkConditionsInfoObj["StartWorkCondition"] = m_WorkCondition.StartWorkCondition; WorkConditionsInfoObj["WorkConditionName"] = ui->lineEdit_workContion->text(); qDebug() << WorkConditionsInfoObj << endl; sigWorkConditon(WorkConditionsInfoObj); this->close(); } void CWokingConditionConfig::on_comboBox_unitType_textActivated(const QString &arg1) { qDebug() << "on_comboBox_unitType_textActivated" << endl; } void CWokingConditionConfig::on_pushButton_del_clicked() { int row = ui->tableView->currentIndex().row();//获得当前行索引 qDebug() << "row" <data(model->index(row,0)).toString(); QString strTableName = "t_WorkConditionRules"; QString strWhere = QString("SN = '%1' and ChannelName = '%2' ").arg(m_Index).arg(strData); int iRet = g_SqliteDB->DeleteDataW(strTableName,strWhere); if(iRet == 0){ QMessageBox::information(this, QStringLiteral("提示"), QStringLiteral("删除成功!")); }else{ QMessageBox::information(this, QStringLiteral("提示"), QStringLiteral("删除失败!")); } model->removeRow(row); }