EvalSchemeWidget.cpp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #include "EvalSchemeWidget.h"
  2. #include <CCanvas/CSchemeView.h>
  3. #include <CCanvas/CSchemeItem.h>
  4. #include <Widgets/Button.h>
  5. #include <Widgets/Menu.h>
  6. #include <QLayout>
  7. #include <QMetaEnum>
  8. #include <QDebug>
  9. QString EvalSchemeWidget::nameOfScheme(Scheme s)
  10. {
  11. switch (s) {
  12. case Input:
  13. return "输入";
  14. case Index:
  15. return "构建指标体系";
  16. case Collect:
  17. return "收集数据";
  18. case Process:
  19. return "处理数据";
  20. case Output:
  21. return "生成报告";
  22. }
  23. }
  24. QString EvalSchemeWidget::nameOfAlgorithm(EvalSchemeWidget::Algorithm a)
  25. {
  26. switch (a) {
  27. case Alg1:
  28. return "层次分析法";
  29. case Alg2:
  30. return "集对分析法";
  31. case Alg3:
  32. return "熵值法";
  33. case Alg4:
  34. return "物元分析法";
  35. case Alg5:
  36. return "灰色聚类评估法";
  37. }
  38. }
  39. EvalSchemeWidget::EvalSchemeWidget(ProjectInfo *proj, int type, QWidget *parent) : EvalWidget(proj, type, parent)
  40. {
  41. setTitle("评估方案规划");
  42. initWidgets();
  43. testData();
  44. }
  45. void EvalSchemeWidget::initWidgets()
  46. {
  47. m_buttonLayout = new QHBoxLayout();
  48. // 按照方案枚举值添加按钮
  49. QMetaEnum sch = QMetaEnum::fromType<Scheme>();
  50. for (int i = 0; i < sch.keyCount(); i++) {
  51. Scheme s = Scheme(sch.value(i));
  52. PushButton *btn = new PushButton(nameOfScheme(s), this);
  53. btn->setMinimumWidth(80);
  54. m_buttonLayout->addWidget(btn);
  55. connect(btn, &PushButton::clicked, [this, s, btn]() { slotSelectScheme(s, btn); });
  56. }
  57. m_buttonLayout->setSpacing(15);
  58. m_buttonLayout->addStretch();
  59. m_clear = new PushButton("清空");
  60. m_buttonLayout->addWidget(m_clear);
  61. connect(m_clear, &PushButton::clicked, this, &EvalSchemeWidget::slotClearScheme);
  62. // 按照算法枚举值添加算法选项
  63. m_menu = new RoundMenu("menu", this);
  64. QMetaEnum alg = QMetaEnum::fromType<Algorithm>();
  65. for (int i = 0; i < alg.keyCount(); i++) {
  66. Algorithm t = Algorithm(alg.value(i));
  67. QAction *act = new QAction(nameOfAlgorithm(t));
  68. m_menu->addAction(act);
  69. connect(act, &QAction::triggered, [this, t]() { slotSelectAlgorithm(t); });
  70. }
  71. m_schemeView = new CSchemeView(this);
  72. m_contentLayout->addLayout(m_buttonLayout);
  73. m_contentLayout->addWidget(m_schemeView);
  74. }
  75. void EvalSchemeWidget::refreshSchemeView()
  76. {
  77. m_schemeView->clear();
  78. QMetaEnum sch = QMetaEnum::fromType<Scheme>();
  79. for (int i = 0; i < sch.keyCount(); i++) {
  80. Scheme s = Scheme(sch.value(i));
  81. if (s == Process) {
  82. for (Algorithm a : m_algs) {
  83. CSchemeItem *item = new CSchemeItem(nameOfAlgorithm(a));
  84. m_schemeView->addItem(item);
  85. }
  86. } else {
  87. if ((m_scheme & s) == s) {
  88. CSchemeItem *item = new CSchemeItem(nameOfScheme(s));
  89. m_schemeView->addItem(item);
  90. }
  91. }
  92. }
  93. }
  94. void EvalSchemeWidget::testData()
  95. {
  96. m_scheme = Input | Index | Collect | Output;
  97. m_algs = { Alg1 };
  98. refreshSchemeView();
  99. }
  100. void EvalSchemeWidget::slotSelectScheme(EvalSchemeWidget::Scheme sch, PushButton *btn)
  101. {
  102. if (sch == Process) {
  103. QPoint pos = btn->mapToGlobal(QPoint()) + QPoint(btn->width(), -10);
  104. m_menu->exec(pos, true);
  105. } else {
  106. m_scheme |= sch;
  107. refreshSchemeView();
  108. }
  109. }
  110. void EvalSchemeWidget::slotSelectAlgorithm(EvalSchemeWidget::Algorithm alg)
  111. {
  112. if (m_algs.contains(alg)) {
  113. return;
  114. }
  115. m_algs.append(alg);
  116. refreshSchemeView();
  117. }
  118. void EvalSchemeWidget::slotClearScheme()
  119. {
  120. m_scheme = 0;
  121. m_algs.clear();
  122. refreshSchemeView();
  123. }