MainWindow.cpp 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  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 "common/QFDIcon.h"
  10. #include <QFramelessWindow.h>
  11. #include <Navigation/NavigationInterface.h>
  12. #include <Widgets/StackedWidget.h>
  13. #include <QDebug>
  14. StackedWidget::StackedWidget(QWidget *parent) : QFrame(parent)
  15. {
  16. m_hBoxLayout = new QHBoxLayout(this);
  17. m_view = new PopUpAniStackedWidget(this);
  18. m_hBoxLayout->setContentsMargins(0, 0, 0, 0);
  19. m_hBoxLayout->addWidget(m_view);
  20. connect(m_view, &PopUpAniStackedWidget::currentChanged, this,
  21. [this](int index) { emit currentWidgetChanged(m_view->widget(index)); });
  22. QPalette pal(palette());
  23. pal.setColor(QPalette::Background, QColor("#fffff8"));
  24. setAutoFillBackground(true);
  25. setPalette(pal);
  26. }
  27. void StackedWidget::addWidget(QWidget *widget)
  28. {
  29. m_view->addWidget(widget);
  30. }
  31. ///
  32. /// @todo widget.verticalScrollBar().setValue(0)
  33. ///
  34. void StackedWidget::setCurrentWidget(QWidget *widget, bool popOut)
  35. {
  36. if (popOut) {
  37. m_view->setCurrentWidget(widget, true, false, 200, QEasingCurve::InQuad);
  38. } else {
  39. m_view->setCurrentWidget(widget, false, true, 300);
  40. }
  41. }
  42. void StackedWidget::setCurrentIndex(int index, bool popOut)
  43. {
  44. setCurrentWidget(m_view->widget(index), popOut);
  45. }
  46. PopUpAniStackedWidget *StackedWidget::view() const
  47. {
  48. return m_view;
  49. }
  50. MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
  51. {
  52. initialize();
  53. initWindow();
  54. initLayout();
  55. initNavigation();
  56. connectSignalsAndSlots();
  57. }
  58. MainWindow::~MainWindow() { }
  59. void MainWindow::initialize()
  60. {
  61. m_titleBar = new CustomTitleBar(this);
  62. m_widgetLayout = new QHBoxLayout();
  63. m_stackWidget = new StackedWidget(this);
  64. m_naviInterface = new NavigationInterface(true, true, this);
  65. m_homeView = new HomeView(this);
  66. m_loginView = new LoginView(this);
  67. m_projectView = new ProjectView(this);
  68. m_evaluateView = new EvaluateView(this);
  69. m_expertManageView = new ExpertManageView(this);
  70. m_aboutView = new AboutView(this);
  71. }
  72. void MainWindow::initWindow()
  73. {
  74. setMinimumSize(QSize(1000, 800));
  75. QFramelessHelper *helper = new QFramelessHelper(this);
  76. helper->setTitleBar(m_titleBar);
  77. QWidget *w = new QWidget();
  78. m_hBoxLayout = new QHBoxLayout(w);
  79. setCentralWidget(w);
  80. m_titleBar->setGeometry(QRect(titleBarIndent(), 0, width() - titleBarIndent(), m_titleBar->height()));
  81. setWindowTitle("专家评定数据分析软件");
  82. QIcon icon = QIcon(":/resource/logo.png");
  83. m_titleBar->setIcon(icon);
  84. setWindowIcon(icon);
  85. }
  86. void MainWindow::initLayout()
  87. {
  88. m_hBoxLayout->setSpacing(0);
  89. m_hBoxLayout->setContentsMargins(0, 0, 0, 0);
  90. m_hBoxLayout->addWidget(m_naviInterface);
  91. m_hBoxLayout->addLayout(m_widgetLayout);
  92. m_hBoxLayout->setStretchFactor(m_widgetLayout, 1);
  93. m_widgetLayout->addWidget(m_stackWidget);
  94. m_widgetLayout->setContentsMargins(0, 32, 0, 0);
  95. }
  96. void MainWindow::initNavigation()
  97. {
  98. m_homeView->setObjectName("homeView");
  99. m_stackWidget->addWidget(m_homeView);
  100. m_naviInterface->addItem(m_homeView->objectName(), NEWFLICON(FluentIcon, HOME), "首页", this,
  101. SLOT(homeViewClicked()));
  102. m_projectView->setObjectName("projectView");
  103. m_stackWidget->addWidget(m_projectView);
  104. m_naviInterface->addItem(m_projectView->objectName(), NEWFLICON(QFDIcon, Project), "工程", this,
  105. SLOT(projectViewClicked()));
  106. m_expertManageView->setObjectName("expertManageView");
  107. m_stackWidget->addWidget(m_expertManageView);
  108. m_naviInterface->addItem(m_expertManageView->objectName(), NEWFLICON(QFDIcon, Expert), "专家信息管理", this,
  109. SLOT(expertViewClicked()));
  110. m_evaluateView->setObjectName("evaluateView");
  111. m_stackWidget->addWidget(m_evaluateView);
  112. m_naviInterface->addItem(m_evaluateView->objectName(), NEWFLICON(QFDIcon, Data), "评估数据分析", this,
  113. SLOT(dataViewClicked()));
  114. m_naviInterface->addSeparator();
  115. m_loginView->setObjectName("loginView");
  116. m_stackWidget->addWidget(m_loginView);
  117. m_naviInterface->addItem(m_loginView->objectName(), NEWFLICON(QFDIcon, User), "用户", this,
  118. SLOT(loginViewClicked()), true, NavigationItemPosition::BOTTOM);
  119. m_aboutView->setObjectName("aboutView");
  120. m_stackWidget->addWidget(m_aboutView);
  121. m_naviInterface->addItem(m_aboutView->objectName(), NEWFLICON(FluentIcon, INFO), "关于", this,
  122. SLOT(aboutViewClicked()), true, NavigationItemPosition::BOTTOM);
  123. m_naviInterface->setDefaultRouteKey(m_homeView->objectName());
  124. connect(m_stackWidget, &StackedWidget::currentWidgetChanged, this,
  125. [this](QWidget *w) { m_naviInterface->setCurrentItem(w->objectName()); });
  126. m_naviInterface->setCurrentItem(m_homeView->objectName());
  127. m_stackWidget->setCurrentIndex(0);
  128. }
  129. void MainWindow::connectSignalsAndSlots()
  130. {
  131. connect(m_naviInterface, &NavigationInterface::displayModeChanged, m_titleBar, &StandardTitleBar::raise);
  132. }
  133. void MainWindow::setNaviInterfaceHidden(bool hidden)
  134. {
  135. m_naviInterface->setHidden(hidden);
  136. m_titleBar->setGeometry(QRect(titleBarIndent(), 0, width() - titleBarIndent(), m_titleBar->height()));
  137. }
  138. int MainWindow::titleBarIndent() const
  139. {
  140. return m_naviInterface->isHidden() ? 0 : 46;
  141. }
  142. void MainWindow::resizeEvent(QResizeEvent *event)
  143. {
  144. Q_UNUSED(event)
  145. m_titleBar->resize(width() - titleBarIndent(), m_titleBar->height());
  146. }
  147. void MainWindow::switchTo(QWidget *widget, bool triggerByUser)
  148. {
  149. qDebug() << __FUNCTION__ << __LINE__;
  150. m_stackWidget->setCurrentWidget(widget, !triggerByUser);
  151. }
  152. void MainWindow::homeViewClicked()
  153. {
  154. switchTo(m_homeView);
  155. }
  156. void MainWindow::loginViewClicked()
  157. {
  158. switchTo(m_loginView);
  159. }
  160. void MainWindow::projectViewClicked()
  161. {
  162. switchTo(m_projectView);
  163. }
  164. void MainWindow::expertViewClicked()
  165. {
  166. switchTo(m_expertManageView);
  167. }
  168. void MainWindow::aboutViewClicked()
  169. {
  170. switchTo(m_aboutView);
  171. }
  172. void MainWindow::dataViewClicked()
  173. {
  174. switchTo(m_evaluateView);
  175. }