From 8085a2875b58633e3785d48e190849f9dd781824 Mon Sep 17 00:00:00 2001 From: zhangsheng Date: Sat, 16 Nov 2024 18:06:36 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BB=84=E6=80=81logic?= =?UTF-8?q?=E5=B1=82=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Configuration.cpp | 479 +++++++++++++++++++++++++++++++++------------- Configuration.h | 5 +- 2 files changed, 349 insertions(+), 135 deletions(-) diff --git a/Configuration.cpp b/Configuration.cpp index da79842..4bc5792 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -346,48 +346,135 @@ void CConfiguration::on_treeView_Relay_customContextMenuRequested(const QPoint & menu.exec(QCursor::pos()); //显示菜单 } +// 递归遍历 QTreeView 的节点,构建 JSON 结构 +QJsonObject CConfiguration::createJsonFromTreeNode(QStandardItem *item) { + QJsonObject nodeObject,inputNodeObj; + QJsonArray inputNodeArray; + + // 根据节点的类型判断是 logicOR、logicAND 还是叶子节点 + QString nodeType = item->text(); + if (nodeType.contains("logicOR") || nodeType.contains("logicAND")){ + QJsonArray childrenArray; + + // 遍历子节点 + for (int i = 0; i < item->rowCount(); ++i) { + QStandardItem *childItem = item->child(i); + childrenArray.append(createJsonFromTreeNode(childItem)); + } + // 添加 Combination 节点 + QJsonObject combination; + int MinimumNumber = item->data(Qt::UserRole + 1).toInt(); + if(nodeType.contains("logicOR")) + combination["MinimumNumber"] = 1; + else if(nodeType.contains("logicAND")) + combination["MinimumNumber"] = MinimumNumber; + inputNodeObj["Combination"] = combination; + // 将子节点数组存储在当前逻辑运算符节点下 + inputNodeObj["Inputs"] = childrenArray; + inputNodeArray.append(inputNodeObj); + if(nodeType.contains("logicOR")) + nodeObject[nodeType] = inputNodeArray; + else if(nodeType.contains("logicAND")) + nodeObject[nodeType.left(nodeType.length()-3)] = inputNodeArray; + + } else { + if(item->text().contains("警报")){ + nodeObject["alarm"] = 1; + nodeObject["danger"] = 0; + }else if (item->text().contains("危险")) { + nodeObject["danger"] = 1; + nodeObject["alarm"] = 0; + } + nodeObject["triggerFeatureName"] = item->text(); + nodeObject["nodeType"] = 1; + nodeObject["displayTitle"] = item->text(); + for (int k = 0;k < g_ChannelBaseInfo.size(); k++) { + if(g_ChannelBaseInfo[k].channelName == item->text().split("-")[0]){ + nodeObject["channelId"] = g_ChannelBaseInfo[k].channelID; + break; + } + } + } + + return nodeObject; +} +// 将生成的 JSON 保存到文件 +void CConfiguration::saveJsonToFile(const QJsonObject &jsonObject, const QString &filePath) { + QJsonDocument jsonDoc(jsonObject); + QFile file(filePath); + if (file.open(QIODevice::WriteOnly)) { + file.write(jsonDoc.toJson(QJsonDocument::Indented)); + file.close(); + qDebug() << "JSON 文件已生成:" << filePath; + } else { + qDebug() << "无法打开文件以保存 JSON 数据"; + } +} +// 从 QTreeView 中生成 JSON 数据 +QJsonObject CConfiguration::generateJsonFromTreeView(QTreeView *treeView) { + QStandardItemModel *model = qobject_cast(treeView->model()); + if (!model) return QJsonObject(); + + QJsonArray rootArray; + + // 遍历模型的每个根节点 + for (int i = 0; i < model->rowCount(); ++i) { + QStandardItem *rootItem = model->item(i); + rootArray.append(createJsonFromTreeNode(rootItem)); + } + + QJsonObject root; + root["logicTree"] = rootArray; // 顶层使用 "logicTree" 作为键 + return root; +} QJsonArray CConfiguration::GetItem(QStandardItem *item,int MinimumNumber) { - QJsonArray arrayAll,arrayAll2; - QJsonObject jsonObj,inputObj,inputObj2,MinimumNumberObj; + QJsonArray arrjsonObjLogic,arrjsonObjLogic2; QString strLogic; + QJsonArray ret; + QJsonArray arrItem; + QJsonObject logicObj,logicInputs; + QJsonArray tmplogic ; if(item->hasChildren()) { for(int i = 0;i < item->rowCount() ;i++) { - QJsonArray array; + QJsonObject inputObj,logic_inputObj,inputObj2,jsonObj,MinimumNumberObj; + QJsonObject jsonObjLogic,jsonObjLogic2; + QJsonArray array,arrayAll,logic_arrayAll,arrayAll2; + QJsonArray inputArray,inputArray2; QStandardItem * childitem = item->child(i); - strLogic = childitem->text(); + strLogic = item->text(); if(childitem->text().contains("logicOR") || childitem->text().contains("logicAND")){ - QJsonArray inputArray,inputArray2; if(childitem->hasChildren()){ - for(int i = 0;i < childitem->rowCount() ;i++){ - QStandardItem * childitem2 = childitem->child(i); - if(childitem2->text().contains("警报")){ - jsonObj["alarm"] = 1; - jsonObj["danger"] = 0; - }else if (childitem2->text().contains("危险")) { - jsonObj["danger"] = 1; - jsonObj["alarm"] = 0; - } - jsonObj["triggerFeatureName"] = childitem2->text(); - jsonObj["nodeType"] = 1; - jsonObj["displayTitle"] = childitem2->text(); - for (int k = 0;k < g_ChannelBaseInfo.size(); k++) { - if(g_ChannelBaseInfo[k].channelName == childitem2->text().split("-")[0]){ - jsonObj["channelId"] = g_ChannelBaseInfo[k].channelID; - break; - } - } - - inputArray.append(jsonObj); - inputArray2.append(jsonObj); - } + arrItem = GetItem(childitem, MinimumNumber); + qDebug() << "m_array0" << arrItem << endl; }else{ QMessageBox::question(this, QStringLiteral("提示"), QStringLiteral("请选择正确的逻辑!")); return arrayAll; } - + }else{ + for(int i = 0;i < item->rowCount() ;i++){ + QStandardItem * childitem2 = item->child(i); + if(childitem2->text().contains("警报")){ + jsonObj["alarm"] = 1; + jsonObj["danger"] = 0; + }else if (childitem2->text().contains("危险")) { + jsonObj["danger"] = 1; + jsonObj["alarm"] = 0; + } + jsonObj["triggerFeatureName"] = childitem2->text(); + jsonObj["nodeType"] = 1; + jsonObj["displayTitle"] = childitem2->text(); + for (int k = 0;k < g_ChannelBaseInfo.size(); k++) { + if(g_ChannelBaseInfo[k].channelName == childitem2->text().split("-")[0]){ + jsonObj["channelId"] = g_ChannelBaseInfo[k].channelID; + break; + } + } + inputArray.append(jsonObj); + inputArray2.append(jsonObj); + } QString strTableName = " t_UnitConfiguration "; QVector vecUnitConfiguration = g_SqliteDB->GetUnitConfigurationInfo(strTableName); for (int i = 0; i < vecUnitConfiguration.size(); i++) { @@ -407,19 +494,43 @@ QJsonArray CConfiguration::GetItem(QStandardItem *item,int MinimumNumber) inputObj2["Combination"] = MinimumNumberObj; arrayAll.append(inputObj); arrayAll2.append(inputObj2); + qDebug() << "arrayAll==========" << arrayAll << endl; + qDebug() << "strLogic" << strLogic.left(strLogic.length()-3) << endl; + jsonObjLogic[strLogic.left(strLogic.length()-3)] = arrayAll; + jsonObjLogic2[strLogic.left(strLogic.length()-3)] = arrayAll2; + arrjsonObjLogic.append(jsonObjLogic); + arrjsonObjLogic2.append(jsonObjLogic2); + } + if((childitem->text().contains("logicOR") || childitem->text().contains("logicAND")) && item->parent()){ + logicObj[strLogic] = arrItem; + qDebug() << "logicObj123" << logicObj << endl; + tmplogic.append(logicObj); + qDebug() << "tmplogic123" << tmplogic << endl; + } + if(!item->parent() && i + 1 == item->rowCount()) + { + qDebug() << "No parent" << item->text() << endl; + qDebug() << "m_array1" << arrItem << endl; + return arrItem; + }else if(item->parent() && i + 1 == item->rowCount()){ + qDebug() << "parent" << item->text() << endl; + MinimumNumberObj["MinimumNumber"] = 1; + logic_inputObj["Combination"] = MinimumNumberObj; + if(childitem->text().contains("logicOR") || childitem->text().contains("logicAND")){ + logic_inputObj["Inputs"] = tmplogic; + }else{ + logic_inputObj["Inputs"] = arrjsonObjLogic; + } + logic_arrayAll.append(logic_inputObj); + qDebug() << "arrayAll111" << logic_arrayAll << endl; + return logic_arrayAll; } } } - QJsonObject jsonObjLogic,jsonObjLogic2; - qDebug() << "strLogic" << strLogic.left(strLogic.length()-3) << endl; - jsonObjLogic[strLogic.left(strLogic.length()-3)] = arrayAll; - jsonObjLogic2[strLogic.left(strLogic.length()-3)] = arrayAll2; - QJsonArray ret; - ret.append(jsonObjLogic); - m_deleteInputArray.append(jsonObjLogic2); - qDebug() << "m_array" << ret << endl; - return ret; + m_deleteInputArray.append(arrjsonObjLogic2); + qDebug() << "m_array2" << arrItem << endl; + return arrItem; // QJsonArray arrayAll,inputArray; @@ -565,22 +676,36 @@ void CConfiguration::on_pushButton_confirm_clicked() QMessageBox::information(this, QStringLiteral("提示"), QStringLiteral("请选择正确的组态逻辑")); return; } - for(int i = 0;i < model_Relay->rowCount() ;i++) - { - QStandardItem *item = model_Relay->item(i); - qDebug() <<"item = " << item->text(); - QJsonArray arrayAll = GetItem(model_Relay->item(i)); - if(arrayAll.size() < 1) - return; - logicObj[item->text().left(7)] = arrayAll; - logicObj2[item->text().left(7)] = m_deleteInputArray; - logicExpressArray.append(logicObj); - logicExpressArray2.append(logicObj2); - } - ConfiguraitonsObj2 = ConfiguraitonsObj; - ConfiguraitonsObj["logicExpress"] = logicExpressArray; - ConfiguraitonsObj2["logicExpress"] = logicExpressArray2; +// for(int i = 0;i < model_Relay->rowCount() ;i++) +// { +// QStandardItem *item = model_Relay->item(i); +// qDebug() <<"item = " << item->text(); +// QJsonArray arrayAll = GetItem(model_Relay->item(i)); +// QJsonObject json = generateJsonFromTreeView(ui->treeView_Relay); +// saveJsonToFile(json, "TreeViewToJSON.json"); +// if(arrayAll.size() < 1) +// return; +// logicObj[item->text().left(7)] = arrayAll; +// logicObj2[item->text().left(7)] = m_deleteInputArray; +// logicExpressArray.append(logicObj); +// logicExpressArray2.append(logicObj2); +// } + QJsonArray rootArray; + // 遍历模型的每个根节点 + for (int i = 0; i < model_Relay->rowCount(); ++i) { + QStandardItem *rootItem = model_Relay->item(i); + rootArray.append(createJsonFromTreeNode(rootItem)); +// logicObj[rootItem->text().left(7)] = rootArray; +// logicObj2[rootItem->text().left(7)] = m_deleteInputArray; +// logicExpressArray.append(logicObj); +// logicExpressArray2.append(logicObj2); + } + + ConfiguraitonsObj2 = ConfiguraitonsObj; + ConfiguraitonsObj["logicExpress"] = rootArray; + ConfiguraitonsObj2["logicExpress"] = logicExpressArray2; + saveJsonToFile(ConfiguraitonsObj, "TreeViewToJSON.json"); QString strTableName = " t_UnitConfiguration "; QVector vecUnitConfiguration = g_SqliteDB->GetUnitConfigurationInfo(strTableName); for (int i = 0; i < vecUnitConfiguration.size(); i++) { @@ -915,10 +1040,62 @@ void CConfiguration::on_comboBox_WC_currentIndexChanged(const QString &arg1) } } } +// 递归解析 JSON 并构建树模型 +void CConfiguration::populateTree(QStandardItem *parentItem, const QJsonObject &jsonObject) { + for (auto it = jsonObject.begin(); it != jsonObject.end(); ++it) { + QString key = it.key(); + QJsonValue value = it.value(); + if (key == "Combination") { +// // 添加 Combination 节点 +// QJsonObject combination = value.toObject(); +// int minNumber = combination["MinimumNumber"].toInt(); +// QString combinationText = QString("Combination (MinimumNumber: %1)").arg(minNumber); +// QStandardItem *combinationItem = new QStandardItem(combinationText); +// parentItem->appendRow(combinationItem); + } else if (key == "Inputs" && value.isArray()) { + // 解析 Inputs 数组 + QJsonArray inputsArray = value.toArray(); +// QStandardItem *inputsItem = new QStandardItem("Inputs"); +// parentItem->appendRow(inputsItem); -void CConfiguration::ViewRelay(int ChannelNoInBoard) -{ + for (const QJsonValue &inputValue : inputsArray) { + if (inputValue.isObject()) { + populateTree(parentItem, inputValue.toObject()); + } + } + } else if (key.startsWith("logic")) { + // 处理 logicAND 或 logicOR 节点 + QStandardItem *logicItem = new QStandardItem(key); + parentItem->appendRow(logicItem); + + if (value.isArray()) { + QJsonArray logicArray = value.toArray(); + for (const QJsonValue &logicValue : logicArray) { + if (logicValue.isObject()) { + QJsonObject logicCombination = logicValue["Combination"].toObject(); + int MinimumNumber =logicCombination["MinimumNumber"].toInt(); + qDebug() << "MinimumNumber" << MinimumNumber << endl; + logicItem->setData(MinimumNumber,Qt::UserRole+1); + if(key.contains("logicAND")) + logicItem->setText(QString("logicAND(%1)").arg(MinimumNumber)); + populateTree(logicItem, logicValue.toObject()); + } + } + } + } else if (value.isObject()) { + // 如果是嵌套对象 + QStandardItem *objectItem = new QStandardItem(key); + parentItem->appendRow(objectItem); + populateTree(objectItem, value.toObject()); + } else if (key == "displayTitle") { + // 叶子节点:展示 displayTitle + QStandardItem *leafItem = new QStandardItem(value.toString()); + parentItem->appendRow(leafItem); + } + } +} +void CConfiguration::ViewRelay(int ChannelNoInBoard){ model_Relay->clear(); ui->lineEdit_2->setText(""); QString strWorkConditonName = ui->comboBox_WC->currentText(); @@ -932,100 +1109,134 @@ void CConfiguration::ViewRelay(int ChannelNoInBoard) if(tempArray.at(j)["ChannelNoInBoard"] == ChannelNoInBoard){ ui->lineEdit_delay->setText(tempArray.at(j)["DelaySeconds"].toString()); QJsonArray tempArray2 = tempArray.at(j)["logicExpress"].toArray(); + // 递归解析 JSON 数据并填充到模型中 for (int k = 0; k < tempArray2.size(); k++) { QJsonObject tempObj2 = tempArray2[k].toObject(); - if (tempObj2.contains(QStringLiteral("logicAND"))){ - QJsonValue arrayValue = tempObj2.value(QStringLiteral("logicAND")); - QStandardItem *itemAnd = new QStandardItem(QString("logicAND")); - model_Relay->appendRow(itemAnd); - QJsonArray array = arrayValue.toArray(); - for (int kk = 0; kk < array.size(); kk++) { - QJsonObject tempObj3 = array[kk].toObject(); - if (tempObj3.contains(QStringLiteral("logicAND"))){ - QJsonValue objValue = tempObj3.value(QStringLiteral("logicAND")); - - QJsonObject Combination = objValue["Combination"].toObject(); - int MinimumNumber = Combination["MinimumNumber"].toInt(); - - QStandardItem *itemAnd2 = new QStandardItem(QString("logicAND(%1)").arg(MinimumNumber)); - itemAnd2->setData(MinimumNumber,Qt::UserRole+1); - itemAnd->appendRow(itemAnd2); - - QJsonArray inputsArray = objValue["Inputs"].toArray(); - for (int ii = 0; ii < inputsArray.size(); ii++) { - QStandardItem *item = new QStandardItem(QString(inputsArray.at(ii)["displayTitle"].toString())); - itemAnd2->appendRow(item); - } - } - if (tempObj3.contains(QStringLiteral("logicOR"))){ - QJsonValue objValue = tempObj3.value(QStringLiteral("logicOR")); - QJsonObject Combination = objValue["Combination"].toObject(); - int MinimumNumber = Combination["MinimumNumber"].toInt(); - QStandardItem *itemOr2 = new QStandardItem(QString("logicOR(%1)").arg(MinimumNumber)); - itemOr2->setData(MinimumNumber,Qt::UserRole+1); - itemAnd->appendRow(itemOr2); - - QJsonArray arrValue2 = objValue.toArray(); - for(int jj = 0; jj < arrValue2.size();jj++){ - QJsonArray inputsArray = arrValue2.at(jj)["Inputs"].toArray(); - for (int ii = 0; ii < inputsArray.size(); ii++) { - QStandardItem *item = new QStandardItem(QString(inputsArray.at(ii)["displayTitle"].toString())); - itemOr2->appendRow(item); - } - } - - } - } - - } if (tempObj2.contains(QStringLiteral("logicOR"))){ QJsonValue arrayValue = tempObj2.value(QStringLiteral("logicOR")); QStandardItem *itemOr = new QStandardItem(QString("logicOR")); - model_Relay->appendRow(itemOr); QJsonArray array = arrayValue.toArray(); for (int kk = 0; kk < array.size(); kk++) { QJsonObject tempObj3 = array[k].toObject(); - if (tempObj3.contains(QStringLiteral("logicAND"))){ - QJsonValue objValue = tempObj3.value(QStringLiteral("logicAND")); - QJsonArray array2 = objValue.toArray(); - for (int jj = 0; jj < array2.size(); jj++) { - QJsonObject tempObj4 = array2[jj].toObject(); - QJsonObject Combination = tempObj4["Combination"].toObject(); - int MinimumNumber = Combination["MinimumNumber"].toInt(); - QStandardItem *itemAnd2 = new QStandardItem(QString("logicAND(%1)").arg(MinimumNumber)); - QJsonArray inputsArray = tempObj4["Inputs"].toArray(); - for (int ii = 0; ii < inputsArray.size(); ii++) { - QStandardItem *item = new QStandardItem(QString(inputsArray.at(ii)["displayTitle"].toString())); - itemAnd2->appendRow(item); - } - itemAnd2->setData(MinimumNumber,Qt::UserRole+1); - itemOr->appendRow(itemAnd2); - } - } - if (tempObj3.contains(QStringLiteral("logicOR"))){ - QJsonValue objValue = tempObj3.value(QStringLiteral("logicOR")); - QJsonObject Combination = objValue["Combination"].toObject(); - int MinimumNumber = Combination["MinimumNumber"].toInt(); - QStandardItem *itemOr2 = new QStandardItem(QString("logicOR(%1)").arg(MinimumNumber)); - itemOr2->setData(MinimumNumber,Qt::UserRole+1); - itemOr->appendRow(itemOr2); - - QJsonArray arrValue2 = objValue.toArray(); - for(int jj = 0; jj < arrValue2.size();jj++){ - QJsonArray inputsArray = arrValue2.at(jj)["Inputs"].toArray(); - for (int ii = 0; ii < inputsArray.size(); ii++) { - QStandardItem *item = new QStandardItem(QString(inputsArray.at(ii)["displayTitle"].toString())); - itemOr2->appendRow(item); - } - } - } + populateTree(itemOr, tempObj3); } + model_Relay->appendRow(itemOr); } } } } } } +} +//void CConfiguration::ViewRelay(int ChannelNoInBoard) +//{ +// model_Relay->clear(); +// ui->lineEdit_2->setText(""); +// QString strWorkConditonName = ui->comboBox_WC->currentText(); +// for (int i = 0; i < m_vecWorkConditionObj.size(); i++) { +// QJsonObject tempObj = m_vecWorkConditionObj[i]; +// if(strWorkConditonName == tempObj["WorkConditionName"].toString()){ +// QJsonArray tempArray = tempObj["Configuraitons"].toArray(); +// QString strSecondDelaySeconds = tempObj["SecondDelaySeconds"].toString(); +// ui->lineEdit_2->setText(strSecondDelaySeconds); +// for (int j = 0;j < tempArray.size() ;j++ ) { +// if(tempArray.at(j)["ChannelNoInBoard"] == ChannelNoInBoard){ +// ui->lineEdit_delay->setText(tempArray.at(j)["DelaySeconds"].toString()); +// QJsonArray tempArray2 = tempArray.at(j)["logicExpress"].toArray(); +// for (int k = 0; k < tempArray2.size(); k++) { +// QJsonObject tempObj2 = tempArray2[k].toObject(); +// if (tempObj2.contains(QStringLiteral("logicAND"))){ +// QJsonValue arrayValue = tempObj2.value(QStringLiteral("logicAND")); +// QStandardItem *itemAnd = new QStandardItem(QString("logicAND")); +// model_Relay->appendRow(itemAnd); +// QJsonArray array = arrayValue.toArray(); +// for (int kk = 0; kk < array.size(); kk++) { +// QJsonObject tempObj3 = array[kk].toObject(); +// if (tempObj3.contains(QStringLiteral("logicAND"))){ +// QJsonValue objValue = tempObj3.value(QStringLiteral("logicAND")); + +// QJsonObject Combination = objValue["Combination"].toObject(); +// int MinimumNumber = Combination["MinimumNumber"].toInt(); + +// QStandardItem *itemAnd2 = new QStandardItem(QString("logicAND(%1)").arg(MinimumNumber)); +// itemAnd2->setData(MinimumNumber,Qt::UserRole+1); +// itemAnd->appendRow(itemAnd2); + +// QJsonArray inputsArray = objValue["Inputs"].toArray(); +// for (int ii = 0; ii < inputsArray.size(); ii++) { +// QStandardItem *item = new QStandardItem(QString(inputsArray.at(ii)["displayTitle"].toString())); +// itemAnd2->appendRow(item); +// } +// } +// if (tempObj3.contains(QStringLiteral("logicOR"))){ +// QJsonValue objValue = tempObj3.value(QStringLiteral("logicOR")); +// QJsonObject Combination = objValue["Combination"].toObject(); +// int MinimumNumber = Combination["MinimumNumber"].toInt(); +// QStandardItem *itemOr2 = new QStandardItem(QString("logicOR(%1)").arg(MinimumNumber)); +// itemOr2->setData(MinimumNumber,Qt::UserRole+1); +// itemAnd->appendRow(itemOr2); + +// QJsonArray arrValue2 = objValue.toArray(); +// for(int jj = 0; jj < arrValue2.size();jj++){ +// QJsonArray inputsArray = arrValue2.at(jj)["Inputs"].toArray(); +// for (int ii = 0; ii < inputsArray.size(); ii++) { +// QStandardItem *item = new QStandardItem(QString(inputsArray.at(ii)["displayTitle"].toString())); +// itemOr2->appendRow(item); +// } +// } + +// } +// } + +// } +// if (tempObj2.contains(QStringLiteral("logicOR"))){ +// QJsonValue arrayValue = tempObj2.value(QStringLiteral("logicOR")); +// QStandardItem *itemOr = new QStandardItem(QString("logicOR")); +// model_Relay->appendRow(itemOr); +// QJsonArray array = arrayValue.toArray(); +// for (int kk = 0; kk < array.size(); kk++) { +// QJsonObject tempObj3 = array[k].toObject(); +// if (tempObj3.contains(QStringLiteral("logicAND"))){ +// QJsonValue objValue = tempObj3.value(QStringLiteral("logicAND")); +// QJsonArray array2 = objValue.toArray(); +// for (int jj = 0; jj < array2.size(); jj++) { +// QJsonObject tempObj4 = array2[jj].toObject(); +// QJsonObject Combination = tempObj4["Combination"].toObject(); +// int MinimumNumber = Combination["MinimumNumber"].toInt(); +// QStandardItem *itemAnd2 = new QStandardItem(QString("logicAND(%1)").arg(MinimumNumber)); +// QJsonArray inputsArray = tempObj4["Inputs"].toArray(); +// for (int ii = 0; ii < inputsArray.size(); ii++) { +// QStandardItem *item = new QStandardItem(QString(inputsArray.at(ii)["displayTitle"].toString())); +// itemAnd2->appendRow(item); +// } +// itemAnd2->setData(MinimumNumber,Qt::UserRole+1); +// itemOr->appendRow(itemAnd2); +// } +// } +// if (tempObj3.contains(QStringLiteral("logicOR"))){ +// QJsonValue objValue = tempObj3.value(QStringLiteral("logicOR")); +// QJsonObject Combination = objValue["Combination"].toObject(); +// int MinimumNumber = Combination["MinimumNumber"].toInt(); +// QStandardItem *itemOr2 = new QStandardItem(QString("logicOR(%1)").arg(MinimumNumber)); +// itemOr2->setData(MinimumNumber,Qt::UserRole+1); +// itemOr->appendRow(itemOr2); + +// QJsonArray arrValue2 = objValue.toArray(); +// for(int jj = 0; jj < arrValue2.size();jj++){ +// QJsonArray inputsArray = arrValue2.at(jj)["Inputs"].toArray(); +// for (int ii = 0; ii < inputsArray.size(); ii++) { +// QStandardItem *item = new QStandardItem(QString(inputsArray.at(ii)["displayTitle"].toString())); +// itemOr2->appendRow(item); +// } +// } +// } +// } +// } +// } +// } +// } +// } +// } // for(int i = 0;i < model_Available->rowCount() ;i++){ // model_Relay->removeRow(i); @@ -1128,7 +1339,7 @@ void CConfiguration::ViewRelay(int ChannelNoInBoard) // } // } // } -} +//} void CConfiguration::on_radioButton_1_clicked() { diff --git a/Configuration.h b/Configuration.h index 4c594e1..71628d8 100644 --- a/Configuration.h +++ b/Configuration.h @@ -65,7 +65,9 @@ private: QStandardItemModel *model_Relay; QVector m_WorkCondition; - + QJsonObject createJsonFromTreeNode(QStandardItem *item); + void saveJsonToFile(const QJsonObject &jsonObject, const QString &filePath); + QJsonObject generateJsonFromTreeView(QTreeView *treeView); QJsonArray GetItem(QStandardItem *item,int MinimumNumber = -1); QJsonArray m_arrayAll; QJsonArray m_array; @@ -85,6 +87,7 @@ private: QJsonObject SelectChannel(int channelNo); void ViewRelay(int ChannelNoInBoard); void PushData(); + void populateTree(QStandardItem *parentItem, const QJsonObject &jsonObject); int m_isConfirm; int m_curentRLY; }; From d76ec6e50b3fd3e71efa6d2bdd3829cebb50d2e3 Mon Sep 17 00:00:00 2001 From: zhangsheng Date: Tue, 19 Nov 2024 11:29:38 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BB=A7=E7=94=B5?= =?UTF-8?q?=E5=99=A81,2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Configuration.cpp | 28 +++++++- Configuration.h | 4 ++ Configuration.ui | 168 +++++++++++++++++++++++++--------------------- 3 files changed, 124 insertions(+), 76 deletions(-) diff --git a/Configuration.cpp b/Configuration.cpp index 4bc5792..0dc7eed 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -31,10 +31,14 @@ CConfiguration::CConfiguration(QWidget *parent) : pHeader2->setSectionResizeMode(QHeaderView::ResizeToContents); pHeader2->setStretchLastSection(false); + ui->treeView_Available->setEditTriggers(QAbstractItemView::NoEditTriggers); ui->treeView_Relay->setEditTriggers(QAbstractItemView::NoEditTriggers); connect(ui->comboBox_WC,SIGNAL(currentTextChanged(const QString &)),this,SLOT(on_comboBox_WC_currentTextChanged2(const QString&))); + ui->label_4->setVisible(0); + ui->lineEdit_2->setVisible(0); + ui->label_10->setVisible(0); } CConfiguration::~CConfiguration() @@ -665,6 +669,12 @@ void CConfiguration::on_pushButton_confirm_clicked() }else if(ui->radioButton_10->isChecked()){ flag = 1; ConfiguraitonsObj = SelectChannel(12); + }else if(ui->radioButton_11->isChecked()){ + flag = 1; + ConfiguraitonsObj = SelectChannel(1); + }else if(ui->radioButton_12->isChecked()){ + flag = 1; + ConfiguraitonsObj = SelectChannel(2); } if(flag == -1){ @@ -705,7 +715,7 @@ void CConfiguration::on_pushButton_confirm_clicked() ConfiguraitonsObj2 = ConfiguraitonsObj; ConfiguraitonsObj["logicExpress"] = rootArray; ConfiguraitonsObj2["logicExpress"] = logicExpressArray2; - saveJsonToFile(ConfiguraitonsObj, "TreeViewToJSON.json"); + //saveJsonToFile(ConfiguraitonsObj, "TreeViewToJSON.json"); QString strTableName = " t_UnitConfiguration "; QVector vecUnitConfiguration = g_SqliteDB->GetUnitConfigurationInfo(strTableName); for (int i = 0; i < vecUnitConfiguration.size(); i++) { @@ -1427,3 +1437,19 @@ void CConfiguration::on_treeView_Available_pressed(const QModelIndex &index) } +void CConfiguration::on_radioButton_11_clicked() +{ + m_curentRLY = 1; + ui->label_3->setText(ui->radioButton_11->text()+":"); + ViewRelay(1); +} +void CConfiguration::on_radioButton_12_clicked() +{ + m_curentRLY = 2; + ui->label_3->setText(ui->radioButton_12->text()+":"); + ViewRelay(2); +} + + + + diff --git a/Configuration.h b/Configuration.h index 71628d8..f222510 100644 --- a/Configuration.h +++ b/Configuration.h @@ -58,6 +58,10 @@ private slots: void on_treeView_Available_pressed(const QModelIndex &index); + void on_radioButton_12_clicked(); + + void on_radioButton_11_clicked(); + private: Ui::CConfiguration *ui; diff --git a/Configuration.ui b/Configuration.ui index 0f8d184..291d846 100644 --- a/Configuration.ui +++ b/Configuration.ui @@ -7,7 +7,7 @@ 0 0 1052 - 640 + 659 @@ -112,6 +112,9 @@ color: rgb(27, 30, 35); 选择继电器 + + Qt::AlignCenter + @@ -122,89 +125,104 @@ color: rgb(27, 30, 35); 0 - + - - - 150 - 0 - - Qt::Horizontal - - - 继电器3 + + + 18 - - - - - - 继电器4 - - - - - - - 继电器5 - - - - - - - 继电器6 - - - - - - - 继电器7 - - - - - - - 继电器8 - - - - - - - 继电器9 - - - - - - - 继电器10 - - - - - - - 继电器11 - - - - - - - 继电器12 - - + + + + 继电器1 + + + + + + + 继电器2 + + + + + + + 继电器3 + + + + + + + 继电器4 + + + + + + + 继电器5 + + + + + + + 继电器6 + + + + + + + 继电器7 + + + + + + + 继电器8 + + + + + + + 继电器9 + + + + + + + 继电器10 + + + + + + + 继电器11 + + + + + + + 继电器12 + + + + From 39de80586dc12c262533f7c89095d0b127c3831b Mon Sep 17 00:00:00 2001 From: zhangsheng Date: Tue, 19 Nov 2024 15:21:38 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7=E5=92=8C=E5=AD=97=E4=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + mainwindow.cpp | 2 +- realtimeform.cpp | 107 ++++++++--------------------------------------- 3 files changed, 19 insertions(+), 91 deletions(-) diff --git a/.gitignore b/.gitignore index c859599..0a0d543 100644 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,4 @@ deploy/ realtimeform - 副本.cpp +realtimeform22.cpp diff --git a/mainwindow.cpp b/mainwindow.cpp index 9c111cb..df4e67b 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -30,7 +30,7 @@ MainWindow::MainWindow(QWidget *parent) : QDate buildDate = QLocale( QLocale::English ).toDate( QString(__DATE__).replace(" ", " 0"), "MMM dd yyyy"); QTime buildTime = QTime::fromString(__TIME__, "hh:mm:ss"); - g_strVersion = "SJ90C V1.1.0_" + buildDate.toString("yyyyMMdd"); + g_strVersion = "SJ90C V1.1.0_" + buildDate.toString("yyyyMMdd") + "_FCJ"; customLogMessageHandler(QtDebugMsg,g_strVersion + " " + buildTime.toString()); g_strProject = settingsread.value("main/Project").toString(); g_strFre = settingsread.value("main/Fre").toString(); diff --git a/realtimeform.cpp b/realtimeform.cpp index fe34007..6873336 100644 --- a/realtimeform.cpp +++ b/realtimeform.cpp @@ -104,10 +104,7 @@ void CRealTimeForm::timerEvent(QTimerEvent *ev) { m_pSocket->connectToHost(IP, m_nServerPort); // 设置超时连接时间 m_bConnected = m_pSocket->waitForConnected(1 * 1000); -// QNetworkRequest req; -// QString sUrl = QString("http://%1/cgi-bin/General.cgi/").arg(IP); -// req.setUrl(sUrl); -// g_NetMgr->PostJson(req,allObj); + QJsonDocument doc(allObj); QString strData = QString(doc.toJson(QJsonDocument::Indented)); int nRet = m_pSocket->write(strData.toStdString().c_str(), strlen(strData.toStdString().c_str())); @@ -146,8 +143,6 @@ void CRealTimeForm::InitChannelInfo() { void CRealTimeForm::on_graphView_customContextMenuRequested(const QPoint &pos) { qDebug() << " custom menu!!!!!!!!!" << "##" << pos.x() << " ; " << pos.y(); -// if(ui->graphicsView->itemAt(pos) || ui->graphicsView_2->itemAt(pos)) -// return; QMenu menu(this); pActionVerticalLine = menu.addAction("添加竖线"); pActionHorizontalLine = menu.addAction("添加横线"); @@ -180,14 +175,6 @@ void CRealTimeForm::on_graphView_customContextMenuRequested(const QPoint &pos) { connect(pActionAlignmentX, SIGNAL(triggered()), this, SLOT(onTaskBoxContextMenuEvent())); connect(pActionAlignmentY, SIGNAL(triggered()), this, SLOT(onTaskBoxContextMenuEvent())); menu.exec(QCursor::pos()); - //menu.exec(ui->graphicsView->mapToGlobal(pos)); -// if(pActionLine == menu.exec(ui->graphicsView->mapToGlobal(pos))){ -// qDebug() << " Line!!!!!!!!!"<< "##"<< pos.x() << " ; "<< pos.y(); -// SetCurDrawType("Line",pos); -// }else if(pActionRect == menu.exec(ui->graphicsView->mapToGlobal(pos))){ -// qDebug() << " Rect!!!!!!!!!"<< "##"<< pos.x() << " ; "<< pos.y(); -// SetCurDrawType("Rect",pos); -// } } void CRealTimeForm::onTaskBoxContextMenuEvent() { QAction *pEven = qobject_cast(this->sender()); @@ -257,7 +244,6 @@ void CRealTimeForm::SetAlignmentX() { QList list = channleAxisX.values(); qSort(list); float minValue = list.first(); - qDebug() << "minValue" << minValue << endl; QMap::iterator iter = channleAxisX.begin(); for (; iter != channleAxisX.end(); iter++) { iter.key()->setPos(minValue, iter.key()->y()); @@ -309,7 +295,7 @@ void CRealTimeForm::on_addchannel(channelBaseInfo channelbaseInfo, QString str) pen.setColor(QColor(0, 0, 0, 0)); pen.setWidth(1); CMyCustomGraphicsItem *pItemGroup = new CMyCustomGraphicsItem(); - QGraphicsRectItem *pRect = new QGraphicsRectItem(0, 0, 290, 30); + QGraphicsRectItem *pRect = new QGraphicsRectItem(0, 0, 430, 40); pRect->setBrush(QBrush(QColor(255, 255, 255))); pRect->setPen(pen); pRect->setPos(0, 0); @@ -378,18 +364,18 @@ void CRealTimeForm::on_addchannel(channelBaseInfo channelbaseInfo, QString str) pTextValue->setData(3, "value"); pTextValue->setData(4, str); //特征值 QFont font; - font.setPixelSize(16); - QFont font2("黑体", 18, 50); + font.setPixelSize(22); + QFont font2("黑体", 24, 50); font.setFamily(QStringLiteral("黑体")); pTextUnits->setFont(font); pTextUnits->setDefaultTextColor(QColor(27, 30, 35)); pTextChannel->setFont(font); pTextValue->setFont(font2); - pTextValue->setPos(160, -2); + pTextValue->setPos(280, -2); pTextValue->setDefaultTextColor(QColor(31, 81, 136)); - pTextChannel->setPos(0, 2); + pTextChannel->setPos(0, 5); pTextChannel->setDefaultTextColor(QColor(27, 30, 35)); - pTextUnits->setPos(240, 5); + pTextUnits->setPos(380, 5); // 设置可移动、可选择 pItemGroup->addToGroup(pTextChannel); pItemGroup->addToGroup(pTextValue); @@ -542,7 +528,6 @@ void CRealTimeForm::SaveGraphicsConfig() { case 6: { //Line QPointF pos = graphicsItem->pos(); QRectF rect = graphicsItem->boundingRect(); - //qDebug() << "Line" << pos << rect; QJsonObject LinejsonObject; LinejsonObject.insert("x", pos.x()); LinejsonObject.insert("y", pos.y()); @@ -555,7 +540,6 @@ void CRealTimeForm::SaveGraphicsConfig() { case 7: { //Pixmap QPointF pos = graphicsItem->pos(); QRectF rect = graphicsItem->boundingRect(); - //qDebug() << "Pixmap" << pos << rect; QJsonObject PixmapjsonObject; PixmapjsonObject.insert("x", pos.x()); PixmapjsonObject.insert("y", pos.y()); @@ -584,9 +568,7 @@ void CRealTimeForm::SaveGraphicsConfig() { QPointF pos = pGraphicGroupItem->pos(); QRectF rect = pGraphicGroupItem->boundingRect(); channelBaseInfo temp; - //qDebug() << "Group" << pos << rect; QString strChannelID = pGraphicGroupItem->data(0).toString(); - //qDebug() << "pGraphicGroupItem data" << strChannelID << endl; QJsonArray GroupRectjsonArray, GroupTextjsonArray; QJsonObject itemjsonObject; QList items = pGraphicGroupItem->childItems(); @@ -596,13 +578,10 @@ void CRealTimeForm::SaveGraphicsConfig() { itemData = item->data(i).toString(); if (itemData == "value") { itemData2 = item->data(i + 1).toString(); - //qDebug() << "item va data" << itemData << itemData2 << i << endl; break; } else if (itemData == "channel") { - //qDebug() << "item ch data" << itemData << i << endl; break; } else if (itemData == "units") { - //qDebug() << "item un data" << itemData << i << endl; break; } } @@ -686,18 +665,13 @@ void CRealTimeForm::SaveGraphicsConfig() { } QJsonDocument jsonDoc; jsonDoc.setObject(jsonObject); - //QString fileName = QFileDialog::getSaveFileName(this,"另存为 ","xxx.json"); - //if(!fileName.isEmpty()) - { - qDebug() << "另存为" << fileName; - QFile file(fileName); - //if(!file.exists()) - { - file.open(QIODevice::WriteOnly); - file.write(jsonDoc.toJson()); - file.close(); - } - } + qDebug() << "另存为" << fileName; + QFile file(fileName); + file.open(QIODevice::WriteOnly); + file.write(jsonDoc.toJson()); + file.close(); + + } void CRealTimeForm::slotDoubleClick(QGraphicsSceneMouseEvent *event) { @@ -714,7 +688,6 @@ void CRealTimeForm::LoadGraphicsConfig(int type) { QPen pen; // 定义一个画笔,设置画笔颜色和宽度 pen.setColor(QColor(0, 0, 0, 0)); pen.setWidth(1); - //QString fileName =QFileDialog::getOpenFileName(this,"打开文件",QDir::currentPath(), "*.json"); for (int ii = 0; ii < ui->tabWidget->count(); ii++) { QString strFileName = QString("Graph%1.json").arg(ii + 1); #ifdef Q_OS_WIN32 @@ -833,14 +806,12 @@ void CRealTimeForm::LoadGraphicsConfig(int type) { } else { movie = new QMovie(QCoreApplication::applicationDirPath() + "/image/unit/zhouliushi.gif"); } - //pPixmap = new QGraphicsPixmapItem(QPixmap(QCoreApplication::applicationDirPath() + "/image/unit/zhouliushi.png")); } else if (strContent == "可逆式机组") { if (type == 1 || type == 2) { pPixmap = new QGraphicsPixmapItem(QPixmap(QCoreApplication::applicationDirPath() + "/image/unit/kenishi.png")); } else { movie = new QMovie(QCoreApplication::applicationDirPath() + "/image/unit/kenishi.gif"); } - //pPixmap = new QGraphicsPixmapItem(QPixmap(QCoreApplication::applicationDirPath() + "/image/unit/kenishi.png")); } else if (strContent == "灯泡式机组") { if (type == 1 || type == 2) { pPixmap = new QGraphicsPixmapItem(QPixmap(QCoreApplication::applicationDirPath() + "/image/unit/dengpaoshi.png")); @@ -873,25 +844,6 @@ void CRealTimeForm::LoadGraphicsConfig(int type) { proxy->setGeometry(QRectF(key["x"].toInt(), key["y"].toInt(), 0, 0)); } } -// QGraphicsPixmapItem *pPixmap = new QGraphicsPixmapItem(QPixmap(":/image/1.png")); -// pPixmap->setPos(key["x"].toInt(), key["y"].toInt()); -// pPixmap->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); -// if(ii == 0){ -// m_pGraphicsScene->addItem(pPixmap); -// }else if(ii == 1){ -// m_pGraphicsScene_2->addItem(pPixmap); -// } -// QLabel *gif_anim = new QLabel(); -// QMovie *movie = new QMovie(":/image/1.gif"); -// gif_anim->setMovie(movie); -// movie->start(); -// QGraphicsProxyWidget *proxy = m_pGraphicsScene->addWidget(gif_anim); -// QGraphicsMovieItem *pPixmap = new QGraphicsMovieItem(); -// pPixmap->setPos(key["x"].toInt(), key["y"].toInt()); -// QMovie movie(":/image/1.png"); -// pPixmap->setMovie(&movie); -// movie.start(); -// m_pGraphicsScene->addItem(pPixmap); } } } @@ -944,7 +896,6 @@ void CRealTimeForm::LoadGraphicsConfig(int type) { pItemGroup->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); } connect(pItemGroup, SIGNAL(doubleclick(QGraphicsSceneMouseEvent *)), this, SLOT(slotDoubleClick(QGraphicsSceneMouseEvent *))); - //qDebug() << array.at(i)["x"].toDouble() << array.at(i)["y"].toDouble() << endl; QJsonObject jsonObject = array.at(i).toObject(); if (jsonObject.contains(QStringLiteral("Rect"))) { QJsonValue arrayValue = jsonObject.value(QStringLiteral("Rect")); @@ -956,7 +907,7 @@ void CRealTimeForm::LoadGraphicsConfig(int type) { QGraphicsRectItem *pRect = new QGraphicsRectItem( 0, 0, - 290, 30); + 430, 40); pRect->setPos(key["x"].toDouble(), key["y"].toDouble()); if (type == 1) { pRect->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); @@ -981,8 +932,8 @@ void CRealTimeForm::LoadGraphicsConfig(int type) { pText->setTextInteractionFlags(Qt::TextEditorInteraction); } QFont font; - QFont font2("黑体", 18, 50); - font.setPixelSize(16); + QFont font2("黑体", 24, 50); + font.setPixelSize(22); font.setFamily(QStringLiteral("黑体")); pText->setFont(font); if (key["data"].toString() == "units") { @@ -1019,7 +970,6 @@ void CRealTimeForm::LoadGraphicsConfig(int type) { } } void CRealTimeForm::keyPressEvent(QKeyEvent *event) { - //QGraphicsItem::keyPressEvent(event); qDebug() << "键盘按下"; if (event->key() == Qt::Key_Delete) { qDebug() << "press Key_Delete"; @@ -1223,26 +1173,6 @@ void CRealTimeForm::ParseCharacteristic(QJsonArray &arrayValue) { void CRealTimeForm::slotRecieve() { QByteArray arrayReady = m_pSocket->readAll(); m_arrayReady += arrayReady; -// customLogMessageHandler(QtDebugMsg,m_arrayReady); -// qDebug() << "arrayReady" << arrayReady << endl; -// QJsonDocument doc = QJsonDocument::fromJson(arrayReady); -// QJsonObject objec = doc.object(); -// if(objec.contains("cmd")) -// { -// QJsonValue arrays_value = objec.take("cmd"); -// qDebug()<<"cmd ="<(); if (objec.contains("cmd")) { QJsonValue arrays_value = objec.take("cmd"); - //qDebug()<<"cmd ="< Date: Tue, 19 Nov 2024 15:26:09 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E8=BF=98=E5=8E=9F=E5=AD=97=E4=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- realtimeform.cpp | 107 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 90 insertions(+), 17 deletions(-) diff --git a/realtimeform.cpp b/realtimeform.cpp index 6873336..fe34007 100644 --- a/realtimeform.cpp +++ b/realtimeform.cpp @@ -104,7 +104,10 @@ void CRealTimeForm::timerEvent(QTimerEvent *ev) { m_pSocket->connectToHost(IP, m_nServerPort); // 设置超时连接时间 m_bConnected = m_pSocket->waitForConnected(1 * 1000); - +// QNetworkRequest req; +// QString sUrl = QString("http://%1/cgi-bin/General.cgi/").arg(IP); +// req.setUrl(sUrl); +// g_NetMgr->PostJson(req,allObj); QJsonDocument doc(allObj); QString strData = QString(doc.toJson(QJsonDocument::Indented)); int nRet = m_pSocket->write(strData.toStdString().c_str(), strlen(strData.toStdString().c_str())); @@ -143,6 +146,8 @@ void CRealTimeForm::InitChannelInfo() { void CRealTimeForm::on_graphView_customContextMenuRequested(const QPoint &pos) { qDebug() << " custom menu!!!!!!!!!" << "##" << pos.x() << " ; " << pos.y(); +// if(ui->graphicsView->itemAt(pos) || ui->graphicsView_2->itemAt(pos)) +// return; QMenu menu(this); pActionVerticalLine = menu.addAction("添加竖线"); pActionHorizontalLine = menu.addAction("添加横线"); @@ -175,6 +180,14 @@ void CRealTimeForm::on_graphView_customContextMenuRequested(const QPoint &pos) { connect(pActionAlignmentX, SIGNAL(triggered()), this, SLOT(onTaskBoxContextMenuEvent())); connect(pActionAlignmentY, SIGNAL(triggered()), this, SLOT(onTaskBoxContextMenuEvent())); menu.exec(QCursor::pos()); + //menu.exec(ui->graphicsView->mapToGlobal(pos)); +// if(pActionLine == menu.exec(ui->graphicsView->mapToGlobal(pos))){ +// qDebug() << " Line!!!!!!!!!"<< "##"<< pos.x() << " ; "<< pos.y(); +// SetCurDrawType("Line",pos); +// }else if(pActionRect == menu.exec(ui->graphicsView->mapToGlobal(pos))){ +// qDebug() << " Rect!!!!!!!!!"<< "##"<< pos.x() << " ; "<< pos.y(); +// SetCurDrawType("Rect",pos); +// } } void CRealTimeForm::onTaskBoxContextMenuEvent() { QAction *pEven = qobject_cast(this->sender()); @@ -244,6 +257,7 @@ void CRealTimeForm::SetAlignmentX() { QList list = channleAxisX.values(); qSort(list); float minValue = list.first(); + qDebug() << "minValue" << minValue << endl; QMap::iterator iter = channleAxisX.begin(); for (; iter != channleAxisX.end(); iter++) { iter.key()->setPos(minValue, iter.key()->y()); @@ -295,7 +309,7 @@ void CRealTimeForm::on_addchannel(channelBaseInfo channelbaseInfo, QString str) pen.setColor(QColor(0, 0, 0, 0)); pen.setWidth(1); CMyCustomGraphicsItem *pItemGroup = new CMyCustomGraphicsItem(); - QGraphicsRectItem *pRect = new QGraphicsRectItem(0, 0, 430, 40); + QGraphicsRectItem *pRect = new QGraphicsRectItem(0, 0, 290, 30); pRect->setBrush(QBrush(QColor(255, 255, 255))); pRect->setPen(pen); pRect->setPos(0, 0); @@ -364,18 +378,18 @@ void CRealTimeForm::on_addchannel(channelBaseInfo channelbaseInfo, QString str) pTextValue->setData(3, "value"); pTextValue->setData(4, str); //特征值 QFont font; - font.setPixelSize(22); - QFont font2("黑体", 24, 50); + font.setPixelSize(16); + QFont font2("黑体", 18, 50); font.setFamily(QStringLiteral("黑体")); pTextUnits->setFont(font); pTextUnits->setDefaultTextColor(QColor(27, 30, 35)); pTextChannel->setFont(font); pTextValue->setFont(font2); - pTextValue->setPos(280, -2); + pTextValue->setPos(160, -2); pTextValue->setDefaultTextColor(QColor(31, 81, 136)); - pTextChannel->setPos(0, 5); + pTextChannel->setPos(0, 2); pTextChannel->setDefaultTextColor(QColor(27, 30, 35)); - pTextUnits->setPos(380, 5); + pTextUnits->setPos(240, 5); // 设置可移动、可选择 pItemGroup->addToGroup(pTextChannel); pItemGroup->addToGroup(pTextValue); @@ -528,6 +542,7 @@ void CRealTimeForm::SaveGraphicsConfig() { case 6: { //Line QPointF pos = graphicsItem->pos(); QRectF rect = graphicsItem->boundingRect(); + //qDebug() << "Line" << pos << rect; QJsonObject LinejsonObject; LinejsonObject.insert("x", pos.x()); LinejsonObject.insert("y", pos.y()); @@ -540,6 +555,7 @@ void CRealTimeForm::SaveGraphicsConfig() { case 7: { //Pixmap QPointF pos = graphicsItem->pos(); QRectF rect = graphicsItem->boundingRect(); + //qDebug() << "Pixmap" << pos << rect; QJsonObject PixmapjsonObject; PixmapjsonObject.insert("x", pos.x()); PixmapjsonObject.insert("y", pos.y()); @@ -568,7 +584,9 @@ void CRealTimeForm::SaveGraphicsConfig() { QPointF pos = pGraphicGroupItem->pos(); QRectF rect = pGraphicGroupItem->boundingRect(); channelBaseInfo temp; + //qDebug() << "Group" << pos << rect; QString strChannelID = pGraphicGroupItem->data(0).toString(); + //qDebug() << "pGraphicGroupItem data" << strChannelID << endl; QJsonArray GroupRectjsonArray, GroupTextjsonArray; QJsonObject itemjsonObject; QList items = pGraphicGroupItem->childItems(); @@ -578,10 +596,13 @@ void CRealTimeForm::SaveGraphicsConfig() { itemData = item->data(i).toString(); if (itemData == "value") { itemData2 = item->data(i + 1).toString(); + //qDebug() << "item va data" << itemData << itemData2 << i << endl; break; } else if (itemData == "channel") { + //qDebug() << "item ch data" << itemData << i << endl; break; } else if (itemData == "units") { + //qDebug() << "item un data" << itemData << i << endl; break; } } @@ -665,13 +686,18 @@ void CRealTimeForm::SaveGraphicsConfig() { } QJsonDocument jsonDoc; jsonDoc.setObject(jsonObject); - qDebug() << "另存为" << fileName; - QFile file(fileName); - file.open(QIODevice::WriteOnly); - file.write(jsonDoc.toJson()); - file.close(); - - + //QString fileName = QFileDialog::getSaveFileName(this,"另存为 ","xxx.json"); + //if(!fileName.isEmpty()) + { + qDebug() << "另存为" << fileName; + QFile file(fileName); + //if(!file.exists()) + { + file.open(QIODevice::WriteOnly); + file.write(jsonDoc.toJson()); + file.close(); + } + } } void CRealTimeForm::slotDoubleClick(QGraphicsSceneMouseEvent *event) { @@ -688,6 +714,7 @@ void CRealTimeForm::LoadGraphicsConfig(int type) { QPen pen; // 定义一个画笔,设置画笔颜色和宽度 pen.setColor(QColor(0, 0, 0, 0)); pen.setWidth(1); + //QString fileName =QFileDialog::getOpenFileName(this,"打开文件",QDir::currentPath(), "*.json"); for (int ii = 0; ii < ui->tabWidget->count(); ii++) { QString strFileName = QString("Graph%1.json").arg(ii + 1); #ifdef Q_OS_WIN32 @@ -806,12 +833,14 @@ void CRealTimeForm::LoadGraphicsConfig(int type) { } else { movie = new QMovie(QCoreApplication::applicationDirPath() + "/image/unit/zhouliushi.gif"); } + //pPixmap = new QGraphicsPixmapItem(QPixmap(QCoreApplication::applicationDirPath() + "/image/unit/zhouliushi.png")); } else if (strContent == "可逆式机组") { if (type == 1 || type == 2) { pPixmap = new QGraphicsPixmapItem(QPixmap(QCoreApplication::applicationDirPath() + "/image/unit/kenishi.png")); } else { movie = new QMovie(QCoreApplication::applicationDirPath() + "/image/unit/kenishi.gif"); } + //pPixmap = new QGraphicsPixmapItem(QPixmap(QCoreApplication::applicationDirPath() + "/image/unit/kenishi.png")); } else if (strContent == "灯泡式机组") { if (type == 1 || type == 2) { pPixmap = new QGraphicsPixmapItem(QPixmap(QCoreApplication::applicationDirPath() + "/image/unit/dengpaoshi.png")); @@ -844,6 +873,25 @@ void CRealTimeForm::LoadGraphicsConfig(int type) { proxy->setGeometry(QRectF(key["x"].toInt(), key["y"].toInt(), 0, 0)); } } +// QGraphicsPixmapItem *pPixmap = new QGraphicsPixmapItem(QPixmap(":/image/1.png")); +// pPixmap->setPos(key["x"].toInt(), key["y"].toInt()); +// pPixmap->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); +// if(ii == 0){ +// m_pGraphicsScene->addItem(pPixmap); +// }else if(ii == 1){ +// m_pGraphicsScene_2->addItem(pPixmap); +// } +// QLabel *gif_anim = new QLabel(); +// QMovie *movie = new QMovie(":/image/1.gif"); +// gif_anim->setMovie(movie); +// movie->start(); +// QGraphicsProxyWidget *proxy = m_pGraphicsScene->addWidget(gif_anim); +// QGraphicsMovieItem *pPixmap = new QGraphicsMovieItem(); +// pPixmap->setPos(key["x"].toInt(), key["y"].toInt()); +// QMovie movie(":/image/1.png"); +// pPixmap->setMovie(&movie); +// movie.start(); +// m_pGraphicsScene->addItem(pPixmap); } } } @@ -896,6 +944,7 @@ void CRealTimeForm::LoadGraphicsConfig(int type) { pItemGroup->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); } connect(pItemGroup, SIGNAL(doubleclick(QGraphicsSceneMouseEvent *)), this, SLOT(slotDoubleClick(QGraphicsSceneMouseEvent *))); + //qDebug() << array.at(i)["x"].toDouble() << array.at(i)["y"].toDouble() << endl; QJsonObject jsonObject = array.at(i).toObject(); if (jsonObject.contains(QStringLiteral("Rect"))) { QJsonValue arrayValue = jsonObject.value(QStringLiteral("Rect")); @@ -907,7 +956,7 @@ void CRealTimeForm::LoadGraphicsConfig(int type) { QGraphicsRectItem *pRect = new QGraphicsRectItem( 0, 0, - 430, 40); + 290, 30); pRect->setPos(key["x"].toDouble(), key["y"].toDouble()); if (type == 1) { pRect->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); @@ -932,8 +981,8 @@ void CRealTimeForm::LoadGraphicsConfig(int type) { pText->setTextInteractionFlags(Qt::TextEditorInteraction); } QFont font; - QFont font2("黑体", 24, 50); - font.setPixelSize(22); + QFont font2("黑体", 18, 50); + font.setPixelSize(16); font.setFamily(QStringLiteral("黑体")); pText->setFont(font); if (key["data"].toString() == "units") { @@ -970,6 +1019,7 @@ void CRealTimeForm::LoadGraphicsConfig(int type) { } } void CRealTimeForm::keyPressEvent(QKeyEvent *event) { + //QGraphicsItem::keyPressEvent(event); qDebug() << "键盘按下"; if (event->key() == Qt::Key_Delete) { qDebug() << "press Key_Delete"; @@ -1173,6 +1223,26 @@ void CRealTimeForm::ParseCharacteristic(QJsonArray &arrayValue) { void CRealTimeForm::slotRecieve() { QByteArray arrayReady = m_pSocket->readAll(); m_arrayReady += arrayReady; +// customLogMessageHandler(QtDebugMsg,m_arrayReady); +// qDebug() << "arrayReady" << arrayReady << endl; +// QJsonDocument doc = QJsonDocument::fromJson(arrayReady); +// QJsonObject objec = doc.object(); +// if(objec.contains("cmd")) +// { +// QJsonValue arrays_value = objec.take("cmd"); +// qDebug()<<"cmd ="<(); if (objec.contains("cmd")) { QJsonValue arrays_value = objec.take("cmd"); + //qDebug()<<"cmd ="< Date: Tue, 19 Nov 2024 18:47:09 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=A4=9A=E4=B8=AA?= =?UTF-8?q?=E9=80=9A=E9=81=93=E8=A7=A6=E5=8F=91=E6=98=BE=E7=A4=BA=E4=B8=8D?= =?UTF-8?q?=E5=85=A8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mainwindow.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mainwindow.cpp b/mainwindow.cpp index df4e67b..4a79cbb 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -722,9 +722,7 @@ void MainWindow::mqttReceive_slot(QString strTopic,QByteArray payload) arg(alarmStatusInfo.at(i)["flagOverUnder"].toInt()).arg(alarmStatusInfo.at(i)["timestamp"].toString()).arg("").arg(alarmStatusInfo.at(i)["triggerEventName"].toString()).\ arg(alarmStatusInfo.at(i)["triggerLevel"].toInt()).arg(alarmStatusInfo.at(i)["triggerStatus"].toInt()); g_SqliteDB->InsertData(strTableName,strSql); - if(pRealTimeAlarm == NULL) - return; - pRealTimeAlarm->initTable(); + }else if(alarmStatusInfo.at(i)["triggerStatus"].toInt() == 3){ QString strSqlWhere = QString(" channelId = '%1' order by timestamp DESC LIMIT 1").arg(alarmStatusInfo.at(i)["channelId"].toString()); QString strCol = "uuid"; From 4cd084a0ce61d7936deab822d9ef4171e99dcbeb Mon Sep 17 00:00:00 2001 From: zhangsheng Date: Mon, 25 Nov 2024 16:01:19 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=EF=BC=8C=E7=BB=84=E6=80=81=E7=95=8C=E9=9D=A2=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=BB=A7=E7=94=B5=E5=99=A81,2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Configuration.cpp | 1 - HistoryAlarm.cpp | 12 +++++++----- RealTimeAlarm.cpp | 6 ++++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/Configuration.cpp b/Configuration.cpp index 0dc7eed..bd32c78 100644 --- a/Configuration.cpp +++ b/Configuration.cpp @@ -292,7 +292,6 @@ void CConfiguration::slotDeleteItem() } } jsonObj["channelOperate"] = 3; - QJsonDocument doc(jsonObj); QString strJson(doc.toJson(QJsonDocument::Compact)); QString strSql = QString(" values('%1','%2','%3','%4','%5',3)").arg(SN).arg(ChannelId).arg(BoardNo).arg(ChannelNoInBoard).arg(strJson); diff --git a/HistoryAlarm.cpp b/HistoryAlarm.cpp index 45555d7..3636851 100644 --- a/HistoryAlarm.cpp +++ b/HistoryAlarm.cpp @@ -13,7 +13,7 @@ CHistoryAlarm::CHistoryAlarm(QWidget *parent) : ui(new Ui::CHistoryAlarm) { ui->setupUi(this); - headerStr = QObject::tr(" ,序号,报警级别,报警内容,报警时间,复归时间,报警详情"); + headerStr = QObject::tr(" ,序号,级别,报警内容,报警时间,复归时间,报警详情"); myHeader = new TableHeaderView(Qt::Horizontal, ui->tableView); model = new QStandardItemModel(ui->tableView); ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); //选中行 @@ -44,10 +44,12 @@ CHistoryAlarm::CHistoryAlarm(QWidget *parent) : CheckBoxDelegate *pCheckDelegate = new CheckBoxDelegate(this); ui->tableView->setItemDelegateForColumn(0, pCheckDelegate); ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive); - ui->tableView->setColumnWidth(0, 100); - ui->tableView->setColumnWidth(3, 450); - ui->tableView->setColumnWidth(4, 200); - ui->tableView->setColumnWidth(5, 200); + ui->tableView->setColumnWidth(0, 50); + ui->tableView->setColumnWidth(1, 50); + ui->tableView->setColumnWidth(2, 50); + ui->tableView->setColumnWidth(3, 370); + ui->tableView->setColumnWidth(4, 170); + ui->tableView->setColumnWidth(5, 170); ui->tableView->setAlternatingRowColors(true); diff --git a/RealTimeAlarm.cpp b/RealTimeAlarm.cpp index 4b08ee8..09192a7 100644 --- a/RealTimeAlarm.cpp +++ b/RealTimeAlarm.cpp @@ -14,7 +14,7 @@ CRealTimeAlarm::CRealTimeAlarm(QWidget *parent) : { ui->setupUi(this); ui->widget_alarm->setProperty("flag", "Button"); - headerStr = QObject::tr("序号,报警级别,报警内容,报警时间,报警详情"); + headerStr = QObject::tr("序号,级别,报警内容,报警时间,报警详情"); model = new QStandardItemModel(ui->tableView); ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); //选中行 @@ -22,7 +22,9 @@ CRealTimeAlarm::CRealTimeAlarm(QWidget *parent) : model->setHorizontalHeaderLabels(headerList); model->setColumnCount(headerList.size()); ui->tableView->setModel(model); - ui->tableView->setColumnWidth(2, 450); + ui->tableView->setColumnWidth(0, 50); + ui->tableView->setColumnWidth(1, 50); + ui->tableView->setColumnWidth(2, 370); ui->tableView->setColumnWidth(3, 200); ui->tableView->setAlternatingRowColors(true);