GreyClusteringConfigWidget.cpp 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535
  1. #include "GreyClusteringConfigWidget.h"
  2. #include "GreyClusteringItemDelegate.h"
  3. #include "MultiLevelHeaderView.h"
  4. #include "ui_GreyClusteringConfigWidget.h"
  5. #include "dbService/GradeInfoService.h"
  6. #include "dbService/EffectIndexInfoService.h"
  7. #include "CMind.h"
  8. #include <QLineEdit>
  9. #include <QDebug>
  10. #include <QMessageBox>
  11. GreyClusteringConfigWidget::GreyClusteringConfigWidget(CMind *mind, int grayNumber, QWidget *parent)
  12. : QWidget(parent), ui(new Ui::GreyClusteringConfigWidget), m_mind(mind), m_grayNumber(grayNumber)
  13. {
  14. ui->setupUi(this);
  15. ui->grayConfigTableView->setAlternatingRowColors(false);
  16. ui->grayConfigTableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
  17. ui->grayConfigTableView->horizontalHeader()->setStyleSheet(
  18. "QHeaderView::section{background:rgb(244,244,244);color: black;}");
  19. ui->grayConfigTableView->verticalHeader()->setStyleSheet(
  20. "QHeaderView::section{background:rgb(244,244,244);color: black;}");
  21. ui->grayConfigTableView->verticalHeader()->setDefaultAlignment(Qt::AlignCenter);
  22. ui->grayConfigTableView->setSelectionMode(QAbstractItemView::SingleSelection);
  23. // ui->grayConfigTableView->verticalHeader()->setDefaultSectionSize(20);
  24. ui->grayConfigTableView->horizontalHeader()->hide();
  25. m_model = new QStandardItemModel();
  26. ui->grayConfigTableView->setModel(m_model);
  27. ui->stackedWidget->setCurrentIndex(0);
  28. ui->grayNumber->setText(QString::number(grayNumber));
  29. initFormLayout();
  30. initClusteringItems();
  31. refreshTableView();
  32. resize(1200, 800);
  33. // ui->grayConfigTableView->setEditTriggers(QAbstractItemView::CurrentChanged); //单击触发
  34. }
  35. GreyClusteringConfigWidget::~GreyClusteringConfigWidget()
  36. {
  37. delete ui;
  38. }
  39. void GreyClusteringConfigWidget::initFormLayout()
  40. {
  41. QList<GradeInfo *> gradeInfoList;
  42. QMap<QString, QString> grayLevelMaps;
  43. int projectId = m_mind->root().projectId;
  44. if (!GradeInfoService().QueryGradeByProjectIdAndType(&gradeInfoList, projectId, 1)) {
  45. QMessageBox::warning(this, "警告", "数据库访问失败");
  46. } else {
  47. if (gradeInfoList.size() == 0) {
  48. for (int lvl = 0; lvl < m_grayNumber; ++lvl) {
  49. grayLevelMaps.insert(QString("级别 %1:").arg(lvl + 1), QString("E%1").arg(lvl + 1));
  50. GradeInfo ginfo;
  51. ginfo.projectId = projectId;
  52. ginfo.gradeName = QString("级别 %1").arg(lvl + 1);
  53. ginfo.gradeValue = QString("灰类%1级").arg(lvl + 1);
  54. ginfo.type = 1;
  55. if (!GradeInfoService().AddGradeInfo(ginfo)) {
  56. QMessageBox::warning(this, "警告", "数据库访问失败");
  57. }
  58. }
  59. } else {
  60. for (const auto &gi : gradeInfoList) {
  61. grayLevelMaps.insert(gi->gradeName, gi->gradeValue);
  62. if (grayLevelMaps.size() >= m_grayNumber) {
  63. break;
  64. }
  65. }
  66. // 缺少再补
  67. for (int lvl = grayLevelMaps.size(); lvl < m_grayNumber; ++lvl) {
  68. grayLevelMaps.insert(QString("级别 %1:").arg(lvl + 1), QString("E%1").arg(lvl + 1));
  69. GradeInfo ginfo;
  70. ginfo.projectId = projectId;
  71. ginfo.gradeName = QString("级别 %1").arg(lvl + 1);
  72. ginfo.gradeValue = QString("灰类%1级").arg(lvl + 1);
  73. ginfo.type = 1;
  74. if (!GradeInfoService().AddGradeInfo(ginfo)) {
  75. QMessageBox::warning(this, "警告", "数据库访问失败");
  76. }
  77. }
  78. m_grayNames = grayLevelMaps.values();
  79. ui->stackedWidget->setCurrentIndex(1);
  80. }
  81. }
  82. qDeleteAll(gradeInfoList);
  83. QMapIterator<QString, QString> iter(grayLevelMaps);
  84. while (iter.hasNext()) {
  85. iter.next();
  86. auto le = new QLineEdit;
  87. le->setPlaceholderText("请输入类别");
  88. le->setText(iter.value());
  89. le->setMinimumHeight(28);
  90. le->setMinimumWidth(200);
  91. ui->grayFormLayout->addRow(iter.key() + ":", le);
  92. }
  93. // qDebug() << ui->grayFormLayout->rowCount();
  94. connect(ui->graySaveBtn, &QToolButton::clicked, this, &GreyClusteringConfigWidget::onConfirmClick);
  95. connect(ui->editGrayBtn, &QToolButton::clicked, [=]() { ui->stackedWidget->setCurrentIndex(0); });
  96. }
  97. void GreyClusteringConfigWidget::initClusteringItems()
  98. {
  99. // 脑图层级 < 2 时无效
  100. if (m_mind->levels() < 2) {
  101. return;
  102. }
  103. m_greyClusterings.clear();
  104. // 使用倒数第二层节点及其子节点
  105. int row = 0;
  106. for (CNodeData n : m_mind->nodesInLevel(m_mind->levels() - 1)) {
  107. GreyClusteringItem parentItem = { n.name, row, 0, 1, 1, nullptr };
  108. QList<CNodeData> subNodes = m_mind->subNodes(n);
  109. parentItem.colSpan = subNodes.size() == 0 ? 2 : 1; // 没有子节点,占两列,否则占一列
  110. parentItem.rowSpan = subNodes.size() == 0 ? 1 : subNodes.size(); // 没有子节点,占一行,否则占子节点数目行
  111. if (subNodes.size() == 0) { // 没有子节点,需要录入值
  112. GreyClusteringValue *sg = new GreyClusteringValue;
  113. sg->units = n.dimension;
  114. sg->weiget = 0;
  115. for (const auto &gname : m_grayNames) {
  116. sg->greyRanges << GreyRange { gname, true, 0, true, 0 };
  117. }
  118. sg->leftExtension = 0;
  119. sg->rightExtension = 0;
  120. sg->oldValue = 0;
  121. sg->newValue = 0;
  122. parentItem.value.reset(sg);
  123. }
  124. m_greyClusterings.append(parentItem);
  125. int subRow = row;
  126. // 子节点
  127. for (const CNodeData &sub : subNodes) {
  128. // 因为已有父节点,所以在第2列
  129. GreyClusteringItem childItem = { sub.name, subRow, 1, 1, 1, nullptr };
  130. GreyClusteringValue *sg = new GreyClusteringValue;
  131. sg->units = sub.dimension;
  132. sg->weiget = 0;
  133. for (const auto &gname : m_grayNames) {
  134. sg->greyRanges << GreyRange { gname, true, 0, true, 0 };
  135. }
  136. sg->leftExtension = 0;
  137. sg->rightExtension = 0;
  138. sg->oldValue = 0;
  139. sg->newValue = 0;
  140. childItem.value.reset(sg);
  141. qDebug() << __FUNCTION__ << __LINE__ << childItem.indexName << childItem.value->units << endl;
  142. m_greyClusterings.append(childItem);
  143. subRow++;
  144. }
  145. row += parentItem.rowSpan;
  146. }
  147. m_rowCount = row;
  148. // 数据库对比更新
  149. QList<EffectIndexInfo *> effectIndexInfoList;
  150. int projectid = m_mind->root().projectId;
  151. if (!EffectIndexInfoService().QueryEffectIndexInfoByProjectId(&effectIndexInfoList, projectid)) {
  152. QMessageBox::warning(this, "警告", "数据库访问失败");
  153. return;
  154. }
  155. if (effectIndexInfoList.size() == 0) {
  156. for (const auto &item : m_greyClusterings) {
  157. if (item.value.isNull()) {
  158. continue;
  159. }
  160. EffectIndexInfo effInfo;
  161. effInfo.projectId = projectid;
  162. effInfo.effectIndexName = item.indexName;
  163. QString effectIndexValue;
  164. for (const auto &range : item.value->greyRanges) {
  165. effectIndexValue += ",";
  166. effectIndexValue += range.leftClose ? "[" : "(";
  167. effectIndexValue += QString("%1:%2").arg(range.leftValue).arg(range.rightValue);
  168. effectIndexValue += range.rightClose ? "]" : ")";
  169. }
  170. effInfo.effectIndexValue = effectIndexValue.mid(1);
  171. effInfo.effectIndexUnit = item.value->units;
  172. effInfo.extendLeft = item.value->leftExtension;
  173. effInfo.extendRight = item.value->rightExtension;
  174. if (!EffectIndexInfoService().AddEffectIndexInfo(effInfo)) {
  175. QMessageBox::warning(this, "警告", "数据库访问失败");
  176. break;
  177. }
  178. }
  179. } else {
  180. for (auto &item : m_greyClusterings) {
  181. if (item.value.isNull()) {
  182. continue;
  183. }
  184. for (const auto &effInfo : effectIndexInfoList) {
  185. if (effInfo->effectIndexName == item.indexName) {
  186. if (effInfo->effectIndexUnit.length() > 0) {
  187. item.value->units = effInfo->effectIndexUnit;
  188. }
  189. item.value->leftExtension = effInfo->extendLeft.toDouble();
  190. item.value->rightExtension = effInfo->extendRight.toDouble();
  191. //[0:0],[0:0],[0:0]
  192. QStringList valueList;
  193. if (effInfo->effectIndexValue.length() > 0) {
  194. valueList = effInfo->effectIndexValue.split(",");
  195. }
  196. int align = qMin(valueList.size(), item.value->greyRanges.size());
  197. qDebug() << __FUNCTION__ << __LINE__ << effInfo->effectIndexValue << valueList << align << endl;
  198. for (int str = 0; str < align; str++) {
  199. //[0:0]
  200. QStringList lr = valueList.at(str).mid(1, valueList.at(str).size() - 2).split(":");
  201. if (valueList.at(str).left(1) == "[") {
  202. item.value->greyRanges[str].leftClose = true;
  203. } else {
  204. item.value->greyRanges[str].leftClose = false;
  205. }
  206. item.value->greyRanges[str].leftValue = lr.at(0).toDouble();
  207. item.value->greyRanges[str].rightValue = lr.at(1).toDouble();
  208. if (valueList.at(str).right(1) == "]") {
  209. item.value->greyRanges[str].rightClose = true;
  210. } else {
  211. item.value->greyRanges[str].rightClose = false;
  212. }
  213. }
  214. }
  215. }
  216. }
  217. }
  218. qDeleteAll(effectIndexInfoList);
  219. connect(ui->configSaveBtn, &QToolButton::clicked, this, &GreyClusteringConfigWidget::onConfigSaveBtnClick);
  220. }
  221. /**
  222. #if 0 // 竖直表头
  223. auto vHeader = new MultiLevelHeaderView(Qt::Vertical, 9, 3, t);
  224. vHeader->setColumnWidth(0, 40);
  225. vHeader->setColumnWidth(1, 40);
  226. vHeader->setColumnWidth(2, 80);
  227. vHeader->setCellSpan(0, 0, 9, 1);
  228. vHeader->setCellSpan(0, 1, 1, 2);
  229. vHeader->setCellSpan(1, 1, 3, 1);
  230. vHeader->setCellSpan(1, 2, 1, 1);
  231. vHeader->setCellSpan(2, 2, 1, 1);
  232. vHeader->setCellSpan(3, 2, 1, 1);
  233. vHeader->setCellSpan(4, 1, 1, 2);
  234. vHeader->setCellSpan(5, 1, 1, 2);
  235. vHeader->setCellSpan(6, 1, 1, 2);
  236. vHeader->setCellSpan(7, 1, 2, 1);
  237. vHeader->setCellSpan(7, 2, 1, 1);
  238. vHeader->setCellSpan(8, 2, 1, 1);
  239. vHeader->setCellText(0, 0, "火力");
  240. vHeader->setCellText(0, 1, "火炮口径");
  241. vHeader->setCellText(1, 1, "初速");
  242. vHeader->setCellText(1, 2, "穿甲弹");
  243. vHeader->setCellText(2, 2, "破甲弹");
  244. vHeader->setCellText(3, 2, "榴弹");
  245. vHeader->setCellText(4, 1, "首发命中率");
  246. vHeader->setCellText(5, 1, "直射距离");
  247. vHeader->setCellText(6, 1, "弹药基数");
  248. vHeader->setCellText(7, 1, "时间");
  249. vHeader->setCellText(7, 2, "静对静");
  250. vHeader->setCellText(8, 2, "静对动");
  251. t->setVerticalHeader(vHeader);
  252. #endif
  253. */
  254. struct IndexItem
  255. {
  256. QString name;
  257. int row;
  258. int col;
  259. int rowSpan;
  260. int colSpan;
  261. };
  262. void GreyClusteringConfigWidget::refreshTableView()
  263. {
  264. QTableView *t = ui->grayConfigTableView;
  265. m_model->clear();
  266. // 设置表头
  267. {
  268. auto hHeader = new MultiLevelHeaderView(Qt::Horizontal, 2, nodeDepth + 3 + m_grayNames.size(), t);
  269. hHeader->setSectionResizeMode(QHeaderView::Stretch);
  270. hHeader->setCellSpan(0, 0, 2, nodeDepth); // 指标占位
  271. for (int n = 0; n < 1 + m_grayNames.size(); ++n) { // 单位+灰度级占位
  272. hHeader->setCellSpan(0, nodeDepth + n, 2, 1);
  273. }
  274. hHeader->setCellSpan(0, nodeDepth + 1 + m_grayNames.size(), 1, 2); // 延拓值占位
  275. hHeader->setCellSpan(1, nodeDepth + 1 + m_grayNames.size(), 1, 1);
  276. hHeader->setCellSpan(1, nodeDepth + 1 + m_grayNames.size() + 1, 1, 1);
  277. // 一级
  278. hHeader->setCellText(0, 0, QString("指标"));
  279. hHeader->setCellText(0, nodeDepth, QString("单位"));
  280. for (int i = 0; i < m_grayNames.size(); ++i) {
  281. hHeader->setCellText(0, nodeDepth + 1 + i, m_grayNames.at(i));
  282. }
  283. hHeader->setCellText(0, nodeDepth + 1 + m_grayNames.size(), QString("延拓值"));
  284. // 二级
  285. hHeader->setCellText(1, nodeDepth + 1 + m_grayNames.size(), "左");
  286. hHeader->setCellText(1, nodeDepth + 2 + m_grayNames.size(), "右");
  287. t->setHorizontalHeader(hHeader);
  288. }
  289. m_model->setColumnCount(nodeDepth + 3 + m_grayNames.size());
  290. m_model->setRowCount(m_rowCount);
  291. // 其余的都可输入
  292. for (int r = 0; r < m_model->rowCount(); ++r) {
  293. for (int c = nodeDepth; c < m_model->columnCount(); ++c) {
  294. auto s = new QStandardItem();
  295. s->setTextAlignment(Qt::AlignCenter);
  296. m_model->setItem(r, c, s);
  297. }
  298. }
  299. for (auto &item : m_greyClusterings) {
  300. // 指标栏
  301. auto s = new QStandardItem(item.indexName);
  302. s->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
  303. s->setTextAlignment(Qt::AlignCenter);
  304. s->setToolTip(item.indexName);
  305. m_model->setItem(item.row, item.col, s);
  306. if (item.rowSpan > 1 || item.colSpan > 1) {
  307. t->setSpan(item.row, item.col, item.rowSpan, item.colSpan);
  308. }
  309. if (!item.value.isNull()) {
  310. m_model->item(item.row, nodeDepth)->setText(item.value->units); // 量纲
  311. m_model->item(item.row, nodeDepth)->setEditable(false);
  312. for (int r = 0; r < item.value->greyRanges.size(); r++) {
  313. m_model->item(item.row, nodeDepth + r + 1)
  314. ->setText(QString("%1%2, %3%4")
  315. .arg((item.value->greyRanges[r].leftClose ? "[" : "("))
  316. .arg(item.value->greyRanges[r].leftValue)
  317. .arg(item.value->greyRanges[r].rightValue)
  318. .arg((item.value->greyRanges[r].rightClose ? "]" : ")")));
  319. }
  320. m_model->item(item.row, nodeDepth + m_grayNumber + 1)->setText(QString::number(item.value->leftExtension));
  321. m_model->item(item.row, nodeDepth + m_grayNumber + 2)->setText(QString::number(item.value->rightExtension));
  322. }
  323. }
  324. for (int c = 0; c < m_grayNames.size(); ++c) {
  325. t->setItemDelegateForColumn(c + nodeDepth + 1, new GreyClusteringItemRangeDelegate(t));
  326. }
  327. for (int c = m_grayNames.size(); c < m_grayNames.size() + 2; ++c) {
  328. t->setItemDelegateForColumn(c + nodeDepth + 1, new GreyClusteringItemSpinDelegate(t));
  329. }
  330. }
  331. void GreyClusteringConfigWidget::onConfirmClick()
  332. {
  333. QStringList names;
  334. for (int i = 0; i < m_grayNumber; ++i) {
  335. QLayoutItem *item = ui->grayFormLayout->itemAt(i + 1, QFormLayout::FieldRole);
  336. QLineEdit *le = qobject_cast<QLineEdit *>(item->widget());
  337. if (le) {
  338. if (le->text().trimmed().isEmpty()) {
  339. QMessageBox::warning(this, tr("警告"), tr("级别%1不能为空!").arg(i + 1));
  340. return;
  341. }
  342. names << le->text().trimmed();
  343. }
  344. }
  345. if (names.toSet().size() != m_grayNumber) {
  346. QMessageBox::warning(this, tr("警告"), tr("类别名不能重复!"));
  347. return;
  348. }
  349. m_grayNames = names;
  350. // 更新数据库等级值
  351. QList<GradeInfo *> gradeInfoList;
  352. if (!GradeInfoService().QueryGradeByProjectIdAndType(&gradeInfoList, m_mind->root().projectId, 1)) {
  353. QMessageBox::warning(this, "警告", "数据库访问失败");
  354. return;
  355. }
  356. for (auto gi : gradeInfoList) {
  357. int num = gi->gradeName.mid(3, gi->gradeName.size() - 3).toInt();
  358. if (num < names.size() + 1) {
  359. if (gi->gradeValue != names.at(num - 1)) {
  360. gi->gradeValue = names.at(num - 1);
  361. if (!GradeInfoService().UpdateGradeInfo(*gi)) {
  362. QMessageBox::warning(this, "警告", "数据库访问失败");
  363. return;
  364. }
  365. }
  366. }
  367. }
  368. qDeleteAll(gradeInfoList);
  369. // 刷新表格
  370. refreshTableView();
  371. ui->stackedWidget->setCurrentIndex(1);
  372. }
  373. static bool isNeedUpdate(const EffectIndexInfo &effInfo, const GreyClusteringItem &item)
  374. {
  375. if (effInfo.effectIndexUnit != item.value->units) {
  376. return true;
  377. }
  378. QString effectIndexValue;
  379. for (const auto &range : item.value->greyRanges) {
  380. effectIndexValue += ",";
  381. effectIndexValue += range.leftClose ? "[" : "(";
  382. effectIndexValue += QString("%1:%2").arg(range.leftValue).arg(range.rightValue);
  383. effectIndexValue += range.rightClose ? "]" : ")";
  384. }
  385. if (effInfo.effectIndexValue != effectIndexValue.mid(1)) {
  386. return true;
  387. }
  388. if (effInfo.extendLeft.toDouble() != item.value->leftExtension) {
  389. return true;
  390. }
  391. if (effInfo.extendRight.toDouble() != item.value->rightExtension) {
  392. return true;
  393. }
  394. return false;
  395. }
  396. void GreyClusteringConfigWidget::onConfigSaveBtnClick()
  397. {
  398. for (auto &item : m_greyClusterings) {
  399. if (item.value.isNull()) {
  400. continue;
  401. }
  402. item.value->units = m_model->item(item.row, nodeDepth)->text(); // 指标
  403. for (int r = 0; r < item.value->greyRanges.size(); r++) {
  404. QString str = m_model->item(item.row, nodeDepth + r + 1)->text();
  405. item.value->greyRanges[r].leftClose = str[0] == "[";
  406. item.value->greyRanges[r].rightClose = str.right(1) == "]";
  407. QStringList list = str.mid(1, str.size() - 2).replace(" ", "").split(",");
  408. item.value->greyRanges[r].leftValue = list.at(0).toDouble();
  409. item.value->greyRanges[r].rightValue = list.at(1).toDouble();
  410. }
  411. item.value->leftExtension = m_model->item(item.row, nodeDepth + m_grayNumber + 1)->text().toDouble();
  412. item.value->rightExtension = m_model->item(item.row, nodeDepth + m_grayNumber + 2)->text().toDouble();
  413. }
  414. // 更新数据库
  415. QList<EffectIndexInfo *> effectIndexInfoList;
  416. int projectid = m_mind->root().projectId;
  417. if (!EffectIndexInfoService().QueryEffectIndexInfoByProjectId(&effectIndexInfoList, projectid)) {
  418. QMessageBox::warning(this, "警告", "数据库访问失败");
  419. return;
  420. }
  421. for (auto &item : m_greyClusterings) {
  422. if (item.value.isNull()) {
  423. continue;
  424. }
  425. bool found = false;
  426. for (auto &effInfo : effectIndexInfoList) {
  427. if (effInfo->effectIndexName == item.indexName) {
  428. found = true;
  429. if (isNeedUpdate(*effInfo, item)) {
  430. QString effectIndexValue;
  431. for (const auto &range : item.value->greyRanges) {
  432. effectIndexValue += ",";
  433. effectIndexValue += range.leftClose ? "[" : "(";
  434. effectIndexValue += QString("%1:%2").arg(range.leftValue).arg(range.rightValue);
  435. effectIndexValue += range.rightClose ? "]" : ")";
  436. }
  437. effInfo->effectIndexValue = effectIndexValue.mid(1);
  438. effInfo->effectIndexUnit = item.value->units;
  439. effInfo->extendLeft = QString::number(item.value->leftExtension);
  440. effInfo->extendRight = QString::number(item.value->rightExtension);
  441. if (!EffectIndexInfoService().UpdateEffectIndexInfo(*effInfo)) {
  442. QMessageBox::warning(this, "警告", "数据库访问失败");
  443. qDeleteAll(effectIndexInfoList);
  444. return;
  445. }
  446. }
  447. break;
  448. }
  449. }
  450. if (!found) { // 新增
  451. EffectIndexInfo effInfo;
  452. effInfo.projectId = projectid;
  453. effInfo.effectIndexName = item.indexName;
  454. QString effectIndexValue;
  455. for (const auto &range : item.value->greyRanges) {
  456. effectIndexValue += ",";
  457. effectIndexValue += range.leftClose ? "[" : "(";
  458. effectIndexValue += QString("%1:%2").arg(range.leftValue).arg(range.rightValue);
  459. effectIndexValue += range.rightClose ? "]" : ")";
  460. }
  461. effInfo.effectIndexValue = effectIndexValue.mid(1);
  462. effInfo.effectIndexUnit = item.value->units;
  463. effInfo.extendLeft = QString::number(item.value->leftExtension);
  464. effInfo.extendRight = QString::number(item.value->rightExtension);
  465. if (!EffectIndexInfoService().AddEffectIndexInfo(effInfo)) {
  466. QMessageBox::warning(this, "警告", "数据库访问失败");
  467. break;
  468. }
  469. }
  470. }
  471. qDeleteAll(effectIndexInfoList);
  472. }