MatterElementConfigWidget.cpp 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576
  1. #include "MatterElementConfigWidget.h"
  2. #include "MatterElementItemDelegate.h"
  3. #include "ui_MatterElementConfigWidget.h"
  4. #include "dbService/ScaleInfoService.h"
  5. #include "dbService/GradeInfoService.h"
  6. #include "dbService/GradeIndexInfoService.h"
  7. #include "CMind.h"
  8. #include <QLineEdit>
  9. #include <QMessageBox>
  10. #include <QPushButton>
  11. #include <QDebug>
  12. MatterElementConfigWidget::MatterElementConfigWidget(CMind *mind, int domainLevel, QWidget *parent)
  13. : QWidget(parent), ui(new Ui::MatterElementConfigWidget), m_domainLevel(domainLevel), m_mind(mind)
  14. {
  15. ui->setupUi(this);
  16. initScaleDivisionTable();
  17. initConfigItems();
  18. initDomainTable();
  19. }
  20. MatterElementConfigWidget::~MatterElementConfigWidget()
  21. {
  22. delete ui;
  23. }
  24. void MatterElementConfigWidget::initScaleDivisionTable()
  25. {
  26. QTableView *t = ui->scaleDivisionTable;
  27. t->setAlternatingRowColors(false);
  28. t->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
  29. t->horizontalHeader()->setStyleSheet("QHeaderView::section{background:rgb(244,244,244);color: black;}");
  30. t->verticalHeader()->setStyleSheet("QHeaderView::section{background:rgb(244,244,244);color: black;}");
  31. t->verticalHeader()->setDefaultAlignment(Qt::AlignCenter);
  32. t->setSelectionMode(QAbstractItemView::SingleSelection);
  33. t->verticalHeader()->hide();
  34. int projectId = m_mind->root().projectId;
  35. m_scaleDivisionmodel = new QStandardItemModel;
  36. t->setModel(m_scaleDivisionmodel);
  37. m_scaleDivisionmodel->setRowCount(1);
  38. m_scaleDivisionmodel->setColumnCount(7);
  39. const QStringList headers = { "定义", "很差", "较差", "一般", "较高", "很高", "相邻定义" };
  40. m_scaleDivisionmodel->setHorizontalHeaderLabels(headers);
  41. QStandardItem *s = nullptr;
  42. MatterElementItemSpinDelegate *sd = new MatterElementItemSpinDelegate(t);
  43. QStringList originValues = { "1.0", "3.0", "5.0", "7.0", "9.0", "[2.0, 4.0, 6.0, 8.0]" };
  44. QList<ScaleInfo *> scaleInfoList;
  45. if (!ScaleInfoService().QueryScaleByProjectId(&scaleInfoList, projectId)) {
  46. QMessageBox::warning(this, "警告", "数据库访问失败");
  47. } else {
  48. if (scaleInfoList.size() == 0) {
  49. for (int num = 0; num < originValues.size(); ++num) {
  50. ScaleInfo sinfo;
  51. sinfo.projectId = projectId;
  52. sinfo.scaleName = headers.at(num + 1);
  53. sinfo.scaleValue = originValues.at(num);
  54. if (!ScaleInfoService().AddScaleInfo(sinfo)) {
  55. QMessageBox::warning(this, "警告", "数据库访问失败");
  56. }
  57. }
  58. } else {
  59. for (const auto &si : scaleInfoList) {
  60. int loc = headers.indexOf(si->scaleName);
  61. originValues[loc - 1] = si->scaleValue;
  62. }
  63. }
  64. }
  65. qDeleteAll(scaleInfoList);
  66. for (int i = 0; i < headers.size(); ++i) {
  67. if (i == 0) {
  68. s = new QStandardItem("标度");
  69. s->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
  70. s->setTextAlignment(Qt::AlignCenter);
  71. } else {
  72. s = new QStandardItem(originValues.at(i - 1));
  73. s->setTextAlignment(Qt::AlignCenter);
  74. }
  75. m_scaleDivisionmodel->setItem(0, i, s);
  76. if (i > 0 && i < headers.size() - 1) {
  77. t->setItemDelegateForColumn(i, sd);
  78. }
  79. if (i == headers.size() - 1) {
  80. t->setItemDelegateForColumn(i, new MatterElementItemInsideDelegate);
  81. }
  82. }
  83. connect(ui->updateScaleBtn, &QToolButton::clicked, this, &MatterElementConfigWidget::onScaleValueUpdate);
  84. }
  85. static void clearTab(QTabWidget *tabWidget)
  86. {
  87. while (tabWidget->count() > 0) {
  88. auto widget = tabWidget->widget(0); // 获取当前页对应的widget
  89. tabWidget->removeTab(0); // 从QTabWidget中删除当前页
  90. widget->setParent(nullptr); // 从父控件中删除widget对象
  91. widget->deleteLater(); // 删除widget对象
  92. }
  93. }
  94. void MatterElementConfigWidget::initDomainLevelLayout()
  95. {
  96. ui->levelLabel->setText(QString::number(m_domainLevel));
  97. QList<GradeInfo *> gradeInfoList;
  98. QMap<QString, QString> levelMaps;
  99. int projectId = m_mind->root().projectId;
  100. if (!GradeInfoService().QueryGradeByProjectIdAndType(&gradeInfoList, projectId, 0)) {
  101. QMessageBox::warning(this, "警告", "数据库访问失败");
  102. } else {
  103. if (gradeInfoList.size() == 0) {
  104. for (int lvl = 0; lvl < m_domainLevel; ++lvl) {
  105. levelMaps.insert(QString("%1级:").arg(lvl + 1), QString("E%1").arg(lvl + 1));
  106. GradeInfo ginfo;
  107. ginfo.projectId = projectId;
  108. ginfo.gradeName = QString("%1级").arg(lvl + 1);
  109. ginfo.gradeValue = QString("E%1").arg(lvl + 1);
  110. ginfo.type = 0;
  111. if (!GradeInfoService().AddGradeInfo(ginfo)) {
  112. QMessageBox::warning(this, "警告", "数据库访问失败");
  113. }
  114. }
  115. } else {
  116. for (const auto &gi : gradeInfoList) {
  117. levelMaps.insert(gi->gradeName, gi->gradeValue);
  118. if (levelMaps.size() >= m_domainLevel) {
  119. break;
  120. }
  121. }
  122. for (int lvl = gradeInfoList.size(); lvl < m_domainLevel; ++lvl) {
  123. levelMaps.insert(QString("%1级:").arg(lvl + 1), QString("E%1").arg(lvl + 1));
  124. GradeInfo ginfo;
  125. ginfo.projectId = projectId;
  126. ginfo.gradeName = QString("%1级").arg(lvl + 1);
  127. ginfo.gradeValue = QString("E%1").arg(lvl + 1);
  128. ginfo.type = 0;
  129. if (!GradeInfoService().AddGradeInfo(ginfo)) {
  130. QMessageBox::warning(this, "警告", "数据库访问失败");
  131. }
  132. }
  133. }
  134. }
  135. qDeleteAll(gradeInfoList);
  136. QFormLayout *formLayout = new QFormLayout;
  137. QMapIterator<QString, QString> iter(levelMaps);
  138. while (iter.hasNext()) {
  139. iter.next();
  140. auto le = new QLineEdit(iter.value());
  141. le->setMinimumHeight(30);
  142. le->setMaximumWidth(80);
  143. m_levelEdits << le;
  144. formLayout->addRow(iter.key() + ":", le);
  145. }
  146. auto levelSaveBtn = new QPushButton("保存");
  147. levelSaveBtn->setIcon(QIcon(":/qfluentwidgets/images/icons/Save_black.svg"));
  148. levelSaveBtn->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
  149. levelSaveBtn->setMinimumHeight(30);
  150. levelSaveBtn->setMaximumWidth(80);
  151. formLayout->addRow("", levelSaveBtn);
  152. ui->levelWidget->setLayout(formLayout);
  153. connect(levelSaveBtn, &QPushButton::clicked, this, &MatterElementConfigWidget::onLevelSaveBtnClick);
  154. }
  155. void MatterElementConfigWidget::initConfigItems()
  156. {
  157. // 脑图层级 < 2 时无效
  158. if (m_mind->levels() < 2) {
  159. return;
  160. }
  161. m_allConfigItems.clear();
  162. // 使用倒数第二层节点及其子节点
  163. for (CNodeData n : m_mind->nodesInLevel(m_mind->levels() - 1)) {
  164. QVector<MEDomain> children;
  165. for (CNodeData sub : m_mind->subNodes(n)) {
  166. MEDomain d;
  167. d.name = sub.name;
  168. d.leftValues = QVector<double>(m_domainLevel + 1, 0);
  169. d.rightValues = QVector<double>(m_domainLevel + 1, 0);
  170. children.append(d);
  171. }
  172. MEConfigItem i;
  173. i.parentName = n.name;
  174. i.childs = children;
  175. m_allConfigItems.append(i);
  176. }
  177. QList<GradeIndexInfo *> gradeIndexInfoList;
  178. int projectId = m_mind->root().projectId;
  179. if (!GradeIndexInfoService().QueryGradeIndexInfoByProjectId(&gradeIndexInfoList, projectId)) {
  180. QMessageBox::warning(this, "警告", "数据库访问失败");
  181. } else {
  182. if (gradeIndexInfoList.size() == 0) {
  183. for (const auto &configItem : m_allConfigItems) {
  184. for (int c = 0; c < configItem.childs.size(); ++c) {
  185. // 一个指标对应m_domainLevel+1个配置项
  186. for (int domain = 0; domain < m_domainLevel + 1; ++domain) {
  187. GradeIndexInfo gii;
  188. gii.projectId = projectId;
  189. gii.gradeIndexName = configItem.childs.at(c).name;
  190. gii.gradeParentName = configItem.parentName;
  191. gii.gradeLevel = domain + 1;
  192. gii.gradeIndexValue = QString("(%1, %2)")
  193. .arg(configItem.childs.at(c).leftValues.at(domain))
  194. .arg(configItem.childs.at(c).rightValues.at(domain));
  195. if (!GradeIndexInfoService().AddGradeIndexInfo(gii)) {
  196. QMessageBox::warning(this, "警告", "数据库访问失败");
  197. }
  198. }
  199. }
  200. }
  201. } else {
  202. for (auto &configItem : m_allConfigItems) {
  203. for (int c = 0; c < configItem.childs.size(); ++c) {
  204. bool found = false;
  205. for (auto gindex : gradeIndexInfoList) {
  206. for (int domain = 0; domain < m_domainLevel + 1; ++domain) {
  207. // 默认指标名具有唯一性
  208. if (gindex->gradeIndexName == configItem.childs[c].name
  209. && gindex->gradeLevel == domain + 1) {
  210. QStringList list = gindex->gradeIndexValue.mid(1, gindex->gradeIndexValue.size() - 2)
  211. .replace(" ", "")
  212. .split(",");
  213. configItem.childs[c].leftValues[domain] = list.at(0).toDouble();
  214. configItem.childs[c].rightValues[domain] = list.at(1).toDouble();
  215. found = true;
  216. }
  217. }
  218. }
  219. if (!found) {
  220. for (int domain = 0; domain < m_domainLevel + 1; ++domain) {
  221. GradeIndexInfo gii;
  222. gii.projectId = projectId;
  223. gii.gradeIndexName = configItem.childs[c].name;
  224. gii.gradeParentName = configItem.parentName;
  225. gii.gradeLevel = domain + 1;
  226. gii.gradeIndexValue = QString("(%1, %2)")
  227. .arg(configItem.childs[c].leftValues.at(domain))
  228. .arg(configItem.childs[c].rightValues.at(domain));
  229. if (!GradeIndexInfoService().AddGradeIndexInfo(gii)) {
  230. QMessageBox::warning(this, "警告", "数据库访问失败");
  231. }
  232. }
  233. }
  234. }
  235. }
  236. }
  237. }
  238. qDeleteAll(gradeIndexInfoList);
  239. }
  240. void MatterElementConfigWidget::initDomainTable()
  241. {
  242. initDomainLevelLayout();
  243. m_meRangeDelegate = new MatterElementItemRangeDelegate(this);
  244. const QStringList rangeItems = { "很差", "较差", "一般", "较高", "很高",
  245. "相邻较差", "相邻一般", "相邻较高", "相邻很高" };
  246. QVector<double> rangeValues;
  247. auto scaleValues = getScaleValues();
  248. rangeValues << scaleValues.at(0) << scaleValues.at(1);
  249. m_meRangeDelegate->setOriginItems(rangeItems, rangeValues);
  250. QStringList domainLevels = getDomainLevels();
  251. for (int pindex = 0; pindex < m_allConfigItems.size(); ++pindex) {
  252. QTableView *table = new QTableView;
  253. table->setAlternatingRowColors(false);
  254. table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
  255. table->horizontalHeader()->setStyleSheet("QHeaderView::section{background:rgb(244,244,244);color: black;}");
  256. table->verticalHeader()->setStyleSheet("QHeaderView::section{background:rgb(244,244,244);color: black;}");
  257. table->verticalHeader()->setDefaultAlignment(Qt::AlignCenter);
  258. table->setSelectionMode(QAbstractItemView::SingleSelection);
  259. table->verticalHeader()->hide();
  260. table->verticalHeader()->setDefaultSectionSize(60);
  261. table->horizontalHeader()->hide();
  262. QStandardItemModel *tModel = new QStandardItemModel;
  263. m_domainModels << tModel;
  264. table->setModel(tModel);
  265. int indexNumber = m_allConfigItems.at(pindex).childs.size();
  266. qDebug() << indexNumber;
  267. tModel->setColumnCount(4 * m_domainLevel);
  268. tModel->setRowCount(indexNumber);
  269. for (int r = 0; r < m_domainLevel + 1; ++r) {
  270. QStandardItem *s = nullptr;
  271. if (r < m_domainLevel) {
  272. s = new QStandardItem(QString("R%1").arg(r + 1));
  273. } else {
  274. s = new QStandardItem("Rp");
  275. }
  276. s->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
  277. s->setTextAlignment(Qt::AlignCenter);
  278. if (r < m_domainLevel) {
  279. s->setToolTip(QString("经典域R%1").arg(r + 1));
  280. } else {
  281. s->setToolTip("节域p");
  282. }
  283. tModel->setItem(0, r * 4, s);
  284. table->setColumnWidth(r * 4, 20);
  285. table->setSpan(0, r * 4, indexNumber, 1);
  286. if (r < m_domainLevel) {
  287. s = new QStandardItem(domainLevels.at(r));
  288. } else {
  289. s = new QStandardItem("节域p");
  290. }
  291. s->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
  292. s->setTextAlignment(Qt::AlignCenter);
  293. tModel->setItem(0, r * 4 + 1, s);
  294. table->setSpan(0, r * 4 + 1, indexNumber, 1);
  295. for (int k = 0; k < indexNumber; ++k) {
  296. s = new QStandardItem(m_allConfigItems[pindex].childs[k].name);
  297. s->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
  298. s->setTextAlignment(Qt::AlignCenter);
  299. tModel->setItem(k, r * 4 + 2, s);
  300. s = new QStandardItem();
  301. s->setTextAlignment(Qt::AlignCenter);
  302. s->setText(QString("(%1, %2)")
  303. .arg(m_allConfigItems[pindex].childs[k].leftValues[r])
  304. .arg(m_allConfigItems[pindex].childs[k].rightValues[r]));
  305. tModel->setItem(k, r * 4 + 3, s);
  306. }
  307. table->setItemDelegateForColumn(r * 4 + 3, m_meRangeDelegate);
  308. }
  309. ui->tabWidget->addTab(table, m_allConfigItems.at(pindex).parentName);
  310. }
  311. connect(ui->cleanBtn, &QToolButton::clicked, this, &MatterElementConfigWidget::onClearBtnClick);
  312. connect(ui->saveBtn, &QToolButton::clicked, this, &MatterElementConfigWidget::onSaveBtnClick);
  313. }
  314. QStringList MatterElementConfigWidget::getDomainLevels() const
  315. {
  316. QStringList lvls;
  317. for (int i = 0; i < m_levelEdits.size(); ++i) {
  318. QString v = m_levelEdits.at(i)->text().trimmed();
  319. if (v.isEmpty()) {
  320. lvls << QString("E%1").arg(i + 1);
  321. } else {
  322. lvls << v;
  323. }
  324. }
  325. return lvls;
  326. }
  327. QVector<QVector<double>> MatterElementConfigWidget::getScaleValues() const
  328. {
  329. QVector<QVector<double>> newValues(2);
  330. for (int c = 1; c < m_scaleDivisionmodel->columnCount() - 1; ++c) {
  331. newValues[0] << m_scaleDivisionmodel->item(0, c)->text().toDouble();
  332. }
  333. QString value = m_scaleDivisionmodel->item(0, m_scaleDivisionmodel->columnCount() - 1)->text();
  334. QStringList tmp = value.mid(1, value.size() - 2).replace(" ", "").split(",");
  335. for (const auto &var : tmp) {
  336. newValues[1] << var.toDouble();
  337. }
  338. return newValues;
  339. }
  340. void MatterElementConfigWidget::onLevelSaveBtnClick()
  341. {
  342. QStringList domainLevels = getDomainLevels();
  343. for (auto model : m_domainModels) {
  344. for (int c = 0; c < domainLevels.size(); ++c) {
  345. model->item(0, c * 4 + 1)->setText(domainLevels.at(c));
  346. }
  347. }
  348. // 更新数据库等级值
  349. QList<GradeInfo *> gradeInfoList;
  350. if (!GradeInfoService().QueryGradeByProjectIdAndType(&gradeInfoList, m_mind->root().projectId, 0)) {
  351. QMessageBox::warning(this, "警告", "数据库访问失败");
  352. return;
  353. }
  354. for (auto gi : gradeInfoList) {
  355. int num = gi->gradeName.mid(0, gi->gradeName.size() - 1).toInt();
  356. if (num < domainLevels.size() + 1) {
  357. if (gi->gradeValue != domainLevels.at(num - 1)) {
  358. gi->gradeValue = domainLevels.at(num - 1);
  359. if (!GradeInfoService().UpdateGradeInfo(*gi)) {
  360. QMessageBox::warning(this, "警告", "数据库访问失败");
  361. return;
  362. }
  363. }
  364. }
  365. }
  366. qDeleteAll(gradeInfoList);
  367. }
  368. void MatterElementConfigWidget::onScaleValueUpdate()
  369. {
  370. ui->scaleDivisionTable->clearSelection(); // 清除表格选中
  371. // 把值聚集起来
  372. QVector<double> rangeValues;
  373. auto scaleValues = getScaleValues();
  374. rangeValues << scaleValues.at(0) << scaleValues.at(1);
  375. m_meRangeDelegate->updateOriginValues(rangeValues);
  376. // 更新数据库
  377. QList<ScaleInfo *> scaleInfoList;
  378. if (!ScaleInfoService().QueryScaleByProjectId(&scaleInfoList, m_mind->root().projectId)) {
  379. QMessageBox::warning(this, "警告", "数据库访问失败");
  380. return;
  381. } else {
  382. for (int c = 1; c < m_scaleDivisionmodel->columnCount(); ++c) {
  383. QString header = m_scaleDivisionmodel->horizontalHeaderItem(c)->text();
  384. QString value = m_scaleDivisionmodel->item(0, c)->text();
  385. for (auto si : scaleInfoList) {
  386. if (si->scaleName == header && value != si->scaleValue) {
  387. si->scaleValue = value;
  388. if (!ScaleInfoService().UpdateScaleInfo(*si)) {
  389. QMessageBox::warning(this, "警告", "数据库访问失败");
  390. }
  391. }
  392. }
  393. }
  394. }
  395. qDeleteAll(scaleInfoList);
  396. }
  397. void MatterElementConfigWidget::onClearBtnClick()
  398. {
  399. for (auto &config : m_allConfigItems) {
  400. for (auto &child : config.childs) {
  401. for (int domain = 0; domain < m_domainLevel + 1; ++domain) {
  402. child.leftValues[domain] = child.rightValues[domain] = 0;
  403. }
  404. }
  405. }
  406. for (int pindex = 0; pindex < m_allConfigItems.size(); ++pindex) {
  407. QStandardItemModel *tModel = m_domainModels.at(pindex);
  408. int indexNumber = m_allConfigItems.at(pindex).childs.size();
  409. for (int r = 0; r < m_domainLevel + 1; ++r) {
  410. for (int k = 0; k < indexNumber; ++k) {
  411. tModel->item(k, r * 4 + 3)->setText("(0, 0)");
  412. }
  413. }
  414. }
  415. }
  416. void MatterElementConfigWidget::onSaveBtnClick()
  417. {
  418. for (int pindex = 0; pindex < m_allConfigItems.size(); ++pindex) {
  419. QStandardItemModel *tModel = m_domainModels.at(pindex);
  420. int indexNumber = m_allConfigItems.at(pindex).childs.size();
  421. for (int r = 0; r < m_domainLevel + 1; ++r) {
  422. for (int k = 0; k < indexNumber; ++k) {
  423. QString txt = tModel->item(k, r * 4 + 3)->text().trimmed();
  424. QStringList list = txt.mid(1, txt.size() - 2).replace(" ", "").split(",");
  425. m_allConfigItems[pindex].childs[k].leftValues[r] = list.at(0).toDouble();
  426. m_allConfigItems[pindex].childs[k].rightValues[r] = list.at(1).toDouble();
  427. qDebug() << r << k << list;
  428. }
  429. }
  430. }
  431. QList<GradeIndexInfo *> gradeIndexInfoList;
  432. int projectId = m_mind->root().projectId;
  433. if (!GradeIndexInfoService().QueryGradeIndexInfoByProjectId(&gradeIndexInfoList, projectId)) {
  434. QMessageBox::warning(this, "警告", "数据库访问失败");
  435. } else {
  436. if (gradeIndexInfoList.size() == 0) { // 防止数据库被异步删除
  437. for (const auto &configItem : m_allConfigItems) {
  438. for (int c = 0; c < configItem.childs.size(); c++) {
  439. for (int domain = 0; domain < m_domainLevel + 1; ++domain) {
  440. GradeIndexInfo gii;
  441. gii.projectId = projectId;
  442. gii.gradeIndexName = configItem.childs[c].name;
  443. gii.gradeParentName = configItem.parentName;
  444. gii.gradeLevel = domain + 1;
  445. gii.gradeIndexValue = QString("(%1, %2)")
  446. .arg(configItem.childs[c].leftValues.at(domain))
  447. .arg(configItem.childs[c].rightValues.at(domain));
  448. if (!GradeIndexInfoService().AddGradeIndexInfo(gii)) {
  449. QMessageBox::warning(this, "警告", "数据库访问失败");
  450. }
  451. }
  452. }
  453. }
  454. } else {
  455. for (const auto &configItem : m_allConfigItems) {
  456. for (int c = 0; c < configItem.childs.size(); c++) {
  457. bool found = false;
  458. for (auto &gindex : gradeIndexInfoList) {
  459. for (int domain = 0; domain < m_domainLevel + 1; ++domain) {
  460. if ((gindex->gradeIndexName == configItem.childs[c].name)
  461. && (gindex->gradeLevel == domain + 1)) {
  462. if (gindex->gradeIndexValue
  463. != QString("(%1, %2)")
  464. .arg(configItem.childs[c].leftValues.at(domain))
  465. .arg(configItem.childs[c].rightValues.at(domain))) {
  466. gindex->gradeIndexValue = QString("(%1, %2)")
  467. .arg(configItem.childs[c].leftValues.at(domain))
  468. .arg(configItem.childs[c].rightValues.at(domain));
  469. if (!GradeIndexInfoService().UpdateGradeIndexInfo(*gindex)) {
  470. QMessageBox::warning(this, "警告", "数据库访问失败");
  471. }
  472. }
  473. found = true;
  474. }
  475. }
  476. }
  477. if (!found) {
  478. for (int domain = 0; domain < m_domainLevel + 1; ++domain) {
  479. GradeIndexInfo gii;
  480. gii.projectId = projectId;
  481. gii.gradeIndexName = configItem.childs[c].name;
  482. gii.gradeParentName = configItem.parentName;
  483. gii.gradeLevel = c + 1;
  484. gii.gradeIndexValue = QString("(%1, %2)")
  485. .arg(configItem.childs[c].leftValues.at(domain))
  486. .arg(configItem.childs[c].rightValues.at(domain));
  487. if (!GradeIndexInfoService().AddGradeIndexInfo(gii)) {
  488. QMessageBox::warning(this, "警告", "数据库访问失败");
  489. }
  490. }
  491. }
  492. }
  493. }
  494. }
  495. }
  496. qDeleteAll(gradeIndexInfoList);
  497. }
  498. QList<MEConfigItem> MatterElementConfigWidget::getAllConfigItems() const
  499. {
  500. return m_allConfigItems;
  501. }