EXProjectView.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. #include "EXProjectView.h"
  2. #include "EXIndexView.h"
  3. #include "EXDataView.h"
  4. #include "ProjectManager.h"
  5. #include <dbService/ClassSet.h>
  6. #include <common/QFDIcon.h>
  7. #include <Widgets/Button.h>
  8. #include <Widgets/LineEdit.h>
  9. #include <Widgets/TreeView.h>
  10. #include <QBoxLayout>
  11. #include <QLabel>
  12. #include <QStackedWidget>
  13. #include <QPushButton>
  14. #include <QDebug>
  15. EXProjectView::EXProjectView(ProjectInfo *proj, QWidget *parent) : QWidget(parent), m_proj(proj)
  16. {
  17. initWidgets();
  18. initLayout();
  19. connectSigalsAndSlots();
  20. if (m_tree->topLevelItemCount() > 0) {
  21. itemClicked(m_tree->topLevelItem(0), 0);
  22. }
  23. }
  24. void EXProjectView::showEvent(QShowEvent *event)
  25. {
  26. QWidget::showEvent(event);
  27. }
  28. void EXProjectView::hideEvent(QHideEvent *event)
  29. {
  30. QWidget::hideEvent(event);
  31. }
  32. ProjectInfo *EXProjectView::proj() const
  33. {
  34. return m_proj;
  35. }
  36. void EXProjectView::showEvalWidget(int eval, int task)
  37. {
  38. m_stack->setCurrentIndex(task);
  39. EXEvalView *w = (EXEvalView *)m_stack->widget(task);
  40. w->setType(eval);
  41. ProjectManager::EvalType type = (ProjectManager::EvalType)eval;
  42. qDebug() << __FUNCTION__ << __LINE__ << type;
  43. }
  44. void EXProjectView::initWidgets()
  45. {
  46. m_title = new QLabel(this);
  47. m_title->setText(m_proj->projectName);
  48. QFont ft("Microsoft YaHei", 14);
  49. m_title->setFont(ft);
  50. m_tree = new TreeWidget(this);
  51. // 根据评估类型添加列表条目
  52. QList<ProjectManager::EvalType> types = ProjectManager::evalTypeList(*m_proj);
  53. for (int i = 0; i < types.count(); i++) {
  54. QString typeName = ProjectManager::nameOfEvalType(types[i]);
  55. QTreeWidgetItem *item = new QTreeWidgetItem({ typeName });
  56. Qt::ItemFlags f = item->flags() ^ Qt::ItemIsSelectable;
  57. item->setFlags(f); // 设置 topLevelItem 不可选中
  58. item->addChildren({ new QTreeWidgetItem({ "指标体系" }), new QTreeWidgetItem({ "数据采集" }) });
  59. m_tree->addTopLevelItem(item);
  60. }
  61. m_tree->expandAll();
  62. m_tree->setHeaderHidden(true);
  63. m_tree->setFixedWidth(200);
  64. // 分割线
  65. m_seperator = new QWidget(this);
  66. m_seperator->setFixedWidth(1);
  67. QPalette pal(m_seperator->palette());
  68. pal.setColor(QPalette::Background, QColor("#aaaaaa"));
  69. m_seperator->setAutoFillBackground(true);
  70. m_seperator->setPalette(pal);
  71. m_stack = new QStackedWidget(this);
  72. m_indexSystem = new EXIndexView(m_proj, m_stack);
  73. m_dataCollection = new EXDataView(m_proj, m_stack);
  74. m_stack->addWidget(m_indexSystem);
  75. m_stack->addWidget(m_dataCollection);
  76. m_export = new PushButton("导出", this);
  77. m_user = new PushButton("user");
  78. }
  79. void EXProjectView::initLayout()
  80. {
  81. m_layout = new QVBoxLayout(this);
  82. m_headerLayout = new QHBoxLayout();
  83. m_layout->addLayout(m_headerLayout);
  84. m_contentLayout = new QHBoxLayout();
  85. m_layout->addLayout(m_contentLayout);
  86. m_headerLayout->addWidget(m_title);
  87. m_headerLayout->addSpacing(20);
  88. m_headerLayout->addStretch();
  89. m_headerLayout->addWidget(m_export);
  90. m_headerLayout->addWidget(m_user);
  91. m_contentLayout->addWidget(m_tree);
  92. m_contentLayout->addWidget(m_seperator);
  93. m_contentLayout->addWidget(m_stack);
  94. }
  95. void EXProjectView::connectSigalsAndSlots()
  96. {
  97. connect(m_tree, &TreeWidget::itemClicked, this, &EXProjectView::itemClicked);
  98. connect(m_export, &PushButton::clicked, m_dataCollection, &EXDataView::slotExportData);
  99. }
  100. void EXProjectView::itemClicked(QTreeWidgetItem *item, int column)
  101. {
  102. Q_UNUSED(column)
  103. int typeIndex = m_tree->indexOfTopLevelItem(item); // 评估类型, 一级条目
  104. int taskIndex = -1; // 评估事项, 二级条目
  105. if (typeIndex < 0) {
  106. typeIndex = m_tree->indexOfTopLevelItem(item->parent());
  107. taskIndex = item->parent()->indexOfChild(item);
  108. }
  109. // 点击一级条目时, 选中其首个子条目
  110. if (taskIndex < 0) {
  111. taskIndex = 0;
  112. item->child(taskIndex)->setSelected(true);
  113. }
  114. ProjectManager::EvalType eval = ProjectManager::evalTypeList(*m_proj)[typeIndex];
  115. QString typeName = ProjectManager::nameOfEvalType(eval);
  116. showEvalWidget(eval, taskIndex);
  117. }