MainWindow.cpp 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. #include "MainWindow.h"
  2. #include "CustomTitleBar.h"
  3. #include "HomeView.h"
  4. #include "ProjectView.h"
  5. #include "ExpertManageView.h"
  6. #include "EvaluateView.h"
  7. #include "LoginView.h"
  8. #include "AboutView.h"
  9. #include "SettingView.h"
  10. #include "UserView.h"
  11. #include "QFDConfig.h"
  12. #include "common/QFDIcon.h"
  13. #include <QFramelessWindow.h>
  14. #include <Navigation/NavigationInterface.h>
  15. #include <Widgets/StackedWidget.h>
  16. #include <QApplication>
  17. #include <QDebug>
  18. StackedWidget::StackedWidget(QWidget *parent) : QFrame(parent)
  19. {
  20. m_hBoxLayout = new QHBoxLayout(this);
  21. m_view = new PopUpAniStackedWidget(this);
  22. m_hBoxLayout->setContentsMargins(0, 0, 0, 0);
  23. m_hBoxLayout->addWidget(m_view);
  24. connect(m_view, &PopUpAniStackedWidget::currentChanged, this,
  25. [this](int index) { emit currentWidgetChanged(m_view->widget(index)); });
  26. QPalette pal(palette());
  27. pal.setColor(QPalette::Background, QColor("#fffff8"));
  28. setAutoFillBackground(true);
  29. setPalette(pal);
  30. }
  31. void StackedWidget::addWidget(QWidget *widget)
  32. {
  33. m_view->addWidget(widget);
  34. }
  35. ///
  36. /// @todo widget.verticalScrollBar().setValue(0)
  37. ///
  38. void StackedWidget::setCurrentWidget(QWidget *widget, bool popOut)
  39. {
  40. if (popOut) {
  41. m_view->setCurrentWidget(widget, true, false, 200, QEasingCurve::InQuad);
  42. } else {
  43. m_view->setCurrentWidget(widget, false, true, 300);
  44. }
  45. }
  46. void StackedWidget::setCurrentIndex(int index, bool popOut)
  47. {
  48. setCurrentWidget(m_view->widget(index), popOut);
  49. }
  50. PopUpAniStackedWidget *StackedWidget::view() const
  51. {
  52. return m_view;
  53. }
  54. MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
  55. {
  56. m_titleBar = new CustomTitleBar(this);
  57. QFramelessHelper *helper = new QFramelessHelper(this);
  58. helper->setTitleBar(m_titleBar);
  59. setWindowTitle("防护评估系统");
  60. QIcon icon = QIcon(":/resource/logo.png");
  61. qApp->setWindowIcon(icon);
  62. m_titleBar->setIcon(icon);
  63. m_mainStackedWidget = new QStackedWidget(this);
  64. setCentralWidget(m_mainStackedWidget);
  65. initLoginPage();
  66. setMinimumSize(QSize(1000, 800));
  67. }
  68. MainWindow::~MainWindow() { }
  69. void MainWindow::initLoginPage()
  70. {
  71. m_loginView = new LoginView(this);
  72. m_mainStackedWidget->addWidget(m_loginView);
  73. connect(m_loginView, &LoginView::signalLogin, this, &MainWindow::slotLogin);
  74. connect(m_loginView, &LoginView::signalCancelLogin, this, &MainWindow::slotCancelLogin);
  75. }
  76. void MainWindow::initMainPage()
  77. {
  78. m_mainWidget = new QWidget(this);
  79. m_hBoxLayout = new QHBoxLayout(m_mainWidget);
  80. m_widgetLayout = new QHBoxLayout();
  81. m_stackWidget = new StackedWidget(m_mainWidget);
  82. m_naviInterface = new NavigationInterface(true, true, m_mainWidget);
  83. m_naviInterface->panel->setExpandWidth(200);
  84. m_homeView = new HomeView(m_mainWidget);
  85. m_projectView = new ProjectView(m_mainWidget);
  86. m_evaluateView = new EvaluateView(m_mainWidget);
  87. m_expertManageView = new ExpertManageView(m_mainWidget);
  88. m_aboutView = new AboutView(m_mainWidget);
  89. m_settingView = new SettingView(m_mainWidget);
  90. m_userView = new UserView(m_mainWidget);
  91. m_mainStackedWidget->addWidget(m_mainWidget);
  92. m_hBoxLayout->setSpacing(0);
  93. m_hBoxLayout->setContentsMargins(0, 0, 0, 0);
  94. m_hBoxLayout->addWidget(m_naviInterface);
  95. m_hBoxLayout->addLayout(m_widgetLayout);
  96. m_hBoxLayout->setStretchFactor(m_widgetLayout, 1);
  97. m_widgetLayout->addWidget(m_stackWidget);
  98. m_widgetLayout->setContentsMargins(0, 32, 0, 0);
  99. initNavigation();
  100. connect(m_naviInterface, &NavigationInterface::displayModeChanged, m_titleBar, &StandardTitleBar::raise);
  101. connect(m_userView, &UserView::signalLogout, this, &MainWindow::slotLogout);
  102. }
  103. void MainWindow::initNavigation()
  104. {
  105. m_homeView->setObjectName("homeView");
  106. m_stackWidget->addWidget(m_homeView);
  107. m_naviInterface->addItem(m_homeView->objectName(), NEWFLICON(FluentIcon, HOME), "评估项目管理", this,
  108. SLOT(slotNaviItemClicked()));
  109. m_settingView->setObjectName("settingView");
  110. m_stackWidget->addWidget(m_settingView);
  111. m_naviInterface->addItem(m_settingView->objectName(), NEWFLICON(FluentIcon, SETTING), "系统资源管理", this,
  112. SLOT(slotNaviItemClicked()));
  113. m_naviInterface->addSeparator();
  114. m_projectView->setObjectName("projectView");
  115. m_stackWidget->addWidget(m_projectView);
  116. m_naviInterface->addItem(m_projectView->objectName(), NEWFLICON(QFDIcon, Project), "评估方案规划", this,
  117. SLOT(slotNaviItemClicked()), true, NavigationItemPosition::SCROLL);
  118. m_expertManageView->setObjectName("expertManageView");
  119. m_stackWidget->addWidget(m_expertManageView);
  120. m_naviInterface->addItem(m_expertManageView->objectName(), NEWFLICON(QFDIcon, Expert), "指标体系设计", this,
  121. SLOT(slotNaviItemClicked()), true, NavigationItemPosition::SCROLL);
  122. m_evaluateView->setObjectName("evaluateView");
  123. m_stackWidget->addWidget(m_evaluateView);
  124. m_naviInterface->addItem(m_evaluateView->objectName(), NEWFLICON(QFDIcon, Data), "评估数据采集", this,
  125. SLOT(slotNaviItemClicked()), true, NavigationItemPosition::SCROLL);
  126. m_userView->setObjectName("userView");
  127. m_stackWidget->addWidget(m_userView);
  128. m_naviInterface->addItem(m_userView->objectName(), NEWFLICON(QFDIcon, User), "用户", this,
  129. SLOT(slotNaviItemClicked()), true, NavigationItemPosition::BOTTOM);
  130. m_aboutView->setObjectName("aboutView");
  131. m_stackWidget->addWidget(m_aboutView);
  132. m_naviInterface->addItem(m_aboutView->objectName(), NEWFLICON(FluentIcon, INFO), "关于", this,
  133. SLOT(slotNaviItemClicked()), true, NavigationItemPosition::BOTTOM);
  134. connect(m_stackWidget, &StackedWidget::currentWidgetChanged, this,
  135. [this](QWidget *w) { m_naviInterface->setCurrentItem(w->objectName()); });
  136. m_naviInterface->setDefaultRouteKey(m_homeView->objectName());
  137. m_naviInterface->setCurrentItem(m_homeView->objectName());
  138. m_stackWidget->setCurrentIndex(0);
  139. }
  140. void MainWindow::setNaviInterfaceHidden(bool hidden)
  141. {
  142. m_naviInterface->setHidden(hidden);
  143. m_titleBar->setGeometry(QRect(titleBarIndent(), 0, width() - titleBarIndent(), m_titleBar->height()));
  144. }
  145. int MainWindow::titleBarIndent() const
  146. {
  147. if (m_mainStackedWidget->currentIndex() > 0 && m_naviInterface != nullptr && m_naviInterface->isHidden() == false) {
  148. return 46;
  149. }
  150. return 0;
  151. }
  152. void MainWindow::resizeEvent(QResizeEvent *event)
  153. {
  154. Q_UNUSED(event)
  155. m_titleBar->resize(width() - titleBarIndent(), m_titleBar->height());
  156. }
  157. void MainWindow::slotLogin()
  158. {
  159. initMainPage();
  160. m_mainStackedWidget->setCurrentWidget(m_mainWidget);
  161. showMaximized();
  162. m_titleBar->setGeometry(QRect(titleBarIndent(), 0, width() - titleBarIndent(), m_titleBar->height()));
  163. }
  164. void MainWindow::slotLogout()
  165. {
  166. qfReloadHomeProjectsAtShow = true;
  167. m_mainStackedWidget->setCurrentWidget(m_loginView);
  168. m_mainStackedWidget->removeWidget(m_mainWidget);
  169. delete m_mainWidget;
  170. m_mainWidget = nullptr;
  171. showNormal();
  172. m_titleBar->setGeometry(QRect(titleBarIndent(), 0, width() - titleBarIndent(), m_titleBar->height()));
  173. }
  174. void MainWindow::slotCancelLogin()
  175. {
  176. exit(0);
  177. }
  178. void MainWindow::slotNaviItemClicked()
  179. {
  180. for (int i = 0; i < m_stackWidget->view()->count(); i++) {
  181. QWidget *w = m_stackWidget->view()->widget(i);
  182. if (w->objectName() == sender()->property("routeKey")) {
  183. m_stackWidget->setCurrentWidget(w, false);
  184. }
  185. }
  186. }