MainWindow.cpp 5.6 KB

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