MainWindow.cpp 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  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 "common/QFDIcon.h"
  12. #include <QFramelessWindow.h>
  13. #include <Navigation/NavigationInterface.h>
  14. #include <Widgets/StackedWidget.h>
  15. #include <QApplication>
  16. #include <QDebug>
  17. StackedWidget::StackedWidget(QWidget *parent) : QFrame(parent)
  18. {
  19. m_hBoxLayout = new QHBoxLayout(this);
  20. m_view = new PopUpAniStackedWidget(this);
  21. m_hBoxLayout->setContentsMargins(0, 0, 0, 0);
  22. m_hBoxLayout->addWidget(m_view);
  23. connect(m_view, &PopUpAniStackedWidget::currentChanged, this,
  24. [this](int index) { emit currentWidgetChanged(m_view->widget(index)); });
  25. QPalette pal(palette());
  26. pal.setColor(QPalette::Background, QColor("#fffff8"));
  27. setAutoFillBackground(true);
  28. setPalette(pal);
  29. }
  30. void StackedWidget::addWidget(QWidget *widget)
  31. {
  32. m_view->addWidget(widget);
  33. }
  34. ///
  35. /// @todo widget.verticalScrollBar().setValue(0)
  36. ///
  37. void StackedWidget::setCurrentWidget(QWidget *widget, bool popOut)
  38. {
  39. if (popOut) {
  40. m_view->setCurrentWidget(widget, true, false, 200, QEasingCurve::InQuad);
  41. } else {
  42. m_view->setCurrentWidget(widget, false, true, 300);
  43. }
  44. }
  45. void StackedWidget::setCurrentIndex(int index, bool popOut)
  46. {
  47. setCurrentWidget(m_view->widget(index), popOut);
  48. }
  49. PopUpAniStackedWidget *StackedWidget::view() const
  50. {
  51. return m_view;
  52. }
  53. MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
  54. {
  55. // initialize();
  56. // initWindow();
  57. // initLayout();
  58. // initNavigation();
  59. initLoginPage();
  60. // connectSignalsAndSlots();
  61. }
  62. MainWindow::~MainWindow() { }
  63. void MainWindow::initLoginPage()
  64. {
  65. setMinimumSize(QSize(1200, 800));
  66. m_titleBar = new CustomTitleBar(this);
  67. QFramelessHelper *helper = new QFramelessHelper(this);
  68. helper->setTitleBar(m_titleBar);
  69. setWindowTitle("专家评定数据分析软件");
  70. QIcon icon = QIcon(":/resource/logo.png");
  71. qApp->setWindowIcon(icon);
  72. m_titleBar->setGeometry(QRect(titleBarIndent(), 0, width() - titleBarIndent(), m_titleBar->height()));
  73. m_titleBar->setIcon(icon);
  74. m_titleBar->setHidden(true);
  75. m_mainStackedWidget = new QStackedWidget(this);
  76. setCentralWidget(m_mainStackedWidget);
  77. m_loginView = new LoginView(this);
  78. m_mainStackedWidget->addWidget(m_loginView);
  79. connect(m_loginView, &LoginView::signalLogin, this, &MainWindow::slotLogin);
  80. connect(m_loginView, &LoginView::signalCancelLogin, this, &MainWindow::slotCancelLogin);
  81. }
  82. void MainWindow::initMainPage()
  83. {
  84. m_mainWidget = new QWidget(this);
  85. m_hBoxLayout = new QHBoxLayout(m_mainWidget);
  86. m_widgetLayout = new QHBoxLayout();
  87. m_stackWidget = new StackedWidget(m_mainWidget);
  88. m_naviInterface = new NavigationInterface(true, true, m_mainWidget);
  89. m_naviInterface->panel->setExpandWidth(200);
  90. m_homeView = new HomeView(m_mainWidget);
  91. m_projectView = new ProjectView(m_mainWidget);
  92. m_evaluateView = new EvaluateView(m_mainWidget);
  93. m_expertManageView = new ExpertManageView(m_mainWidget);
  94. m_aboutView = new AboutView(m_mainWidget);
  95. m_settingView = new SettingView(m_mainWidget);
  96. m_userView = new UserView(m_mainWidget);
  97. m_mainStackedWidget->addWidget(m_mainWidget);
  98. m_hBoxLayout->setSpacing(0);
  99. m_hBoxLayout->setContentsMargins(0, 0, 0, 0);
  100. m_hBoxLayout->addWidget(m_naviInterface);
  101. m_hBoxLayout->addLayout(m_widgetLayout);
  102. m_hBoxLayout->setStretchFactor(m_widgetLayout, 1);
  103. m_widgetLayout->addWidget(m_stackWidget);
  104. m_widgetLayout->setContentsMargins(0, 32, 0, 0);
  105. initNavigation();
  106. connect(m_naviInterface, &NavigationInterface::displayModeChanged, m_titleBar, &StandardTitleBar::raise);
  107. connect(m_userView, &UserView::signalLogout, this, &MainWindow::slotLogout);
  108. }
  109. void MainWindow::initialize()
  110. {
  111. m_titleBar = new CustomTitleBar(this);
  112. m_mainStackedWidget = new QStackedWidget(this);
  113. m_loginView = new LoginView(this);
  114. m_mainWidget = new QWidget(this);
  115. m_hBoxLayout = new QHBoxLayout(m_mainWidget);
  116. m_widgetLayout = new QHBoxLayout();
  117. m_stackWidget = new StackedWidget(this);
  118. m_naviInterface = new NavigationInterface(true, true, this);
  119. m_naviInterface->panel->setExpandWidth(200);
  120. m_homeView = new HomeView(this);
  121. m_projectView = new ProjectView(this);
  122. m_evaluateView = new EvaluateView(this);
  123. m_expertManageView = new ExpertManageView(this);
  124. m_aboutView = new AboutView(this);
  125. m_settingView = new SettingView(this);
  126. m_userView = new UserView(this);
  127. }
  128. void MainWindow::initWindow()
  129. {
  130. setMinimumSize(QSize(1200, 800));
  131. QFramelessHelper *helper = new QFramelessHelper(this);
  132. helper->setTitleBar(m_titleBar);
  133. setWindowTitle("专家评定数据分析软件");
  134. QIcon icon = QIcon(":/resource/logo.png");
  135. qApp->setWindowIcon(icon);
  136. m_titleBar->setGeometry(QRect(titleBarIndent(), 0, width() - titleBarIndent(), m_titleBar->height()));
  137. m_titleBar->setIcon(icon);
  138. m_titleBar->setHidden(true);
  139. }
  140. void MainWindow::initLayout()
  141. {
  142. setCentralWidget(m_mainStackedWidget);
  143. m_mainStackedWidget->addWidget(m_loginView);
  144. m_mainStackedWidget->addWidget(m_mainWidget);
  145. m_hBoxLayout->setSpacing(0);
  146. m_hBoxLayout->setContentsMargins(0, 0, 0, 0);
  147. m_hBoxLayout->addWidget(m_naviInterface);
  148. m_hBoxLayout->addLayout(m_widgetLayout);
  149. m_hBoxLayout->setStretchFactor(m_widgetLayout, 1);
  150. m_widgetLayout->addWidget(m_stackWidget);
  151. m_widgetLayout->setContentsMargins(0, 32, 0, 0);
  152. }
  153. void MainWindow::initNavigation()
  154. {
  155. m_homeView->setObjectName("homeView");
  156. m_stackWidget->addWidget(m_homeView);
  157. m_naviInterface->addItem(m_homeView->objectName(), NEWFLICON(FluentIcon, HOME), "首页", this,
  158. SLOT(homeViewClicked()));
  159. m_projectView->setObjectName("projectView");
  160. m_stackWidget->addWidget(m_projectView);
  161. m_naviInterface->addItem(m_projectView->objectName(), NEWFLICON(QFDIcon, Project), "工程", this,
  162. SLOT(projectViewClicked()));
  163. m_expertManageView->setObjectName("expertManageView");
  164. m_stackWidget->addWidget(m_expertManageView);
  165. m_naviInterface->addItem(m_expertManageView->objectName(), NEWFLICON(QFDIcon, Expert), "专家信息管理", this,
  166. SLOT(expertViewClicked()));
  167. m_evaluateView->setObjectName("evaluateView");
  168. m_stackWidget->addWidget(m_evaluateView);
  169. m_naviInterface->addItem(m_evaluateView->objectName(), NEWFLICON(QFDIcon, Data), "评估数据分析", this,
  170. SLOT(dataViewClicked()));
  171. m_naviInterface->addSeparator();
  172. m_userView->setObjectName("userView");
  173. m_stackWidget->addWidget(m_userView);
  174. m_naviInterface->addItem(m_userView->objectName(), NEWFLICON(QFDIcon, User), "用户", this, SLOT(userViewClicked()),
  175. true, NavigationItemPosition::BOTTOM);
  176. m_settingView->setObjectName("settingView");
  177. m_stackWidget->addWidget(m_settingView);
  178. m_naviInterface->addItem(m_settingView->objectName(), NEWFLICON(FluentIcon, SETTING), "设置", this,
  179. SLOT(settingViewClicked()), true, NavigationItemPosition::BOTTOM);
  180. m_aboutView->setObjectName("aboutView");
  181. m_stackWidget->addWidget(m_aboutView);
  182. m_naviInterface->addItem(m_aboutView->objectName(), NEWFLICON(FluentIcon, INFO), "关于", this,
  183. SLOT(aboutViewClicked()), true, NavigationItemPosition::BOTTOM);
  184. m_naviInterface->setDefaultRouteKey(m_homeView->objectName());
  185. connect(m_stackWidget, &StackedWidget::currentWidgetChanged, this,
  186. [this](QWidget *w) { m_naviInterface->setCurrentItem(w->objectName()); });
  187. m_naviInterface->setCurrentItem(m_homeView->objectName());
  188. m_stackWidget->setCurrentIndex(0);
  189. }
  190. void MainWindow::connectSignalsAndSlots()
  191. {
  192. connect(m_loginView, &LoginView::signalLogin, this, &MainWindow::slotLogin);
  193. connect(m_loginView, &LoginView::signalCancelLogin, this, &MainWindow::slotCancelLogin);
  194. connect(m_naviInterface, &NavigationInterface::displayModeChanged, m_titleBar, &StandardTitleBar::raise);
  195. connect(m_userView, &UserView::signalLogout, this, &MainWindow::slotLogout);
  196. }
  197. void MainWindow::setNaviInterfaceHidden(bool hidden)
  198. {
  199. m_naviInterface->setHidden(hidden);
  200. m_titleBar->setGeometry(QRect(titleBarIndent(), 0, width() - titleBarIndent(), m_titleBar->height()));
  201. }
  202. int MainWindow::titleBarIndent() const
  203. {
  204. return (m_naviInterface && m_naviInterface->isHidden()) ? 0 : 46;
  205. }
  206. void MainWindow::resizeEvent(QResizeEvent *event)
  207. {
  208. Q_UNUSED(event)
  209. m_titleBar->resize(width() - titleBarIndent(), m_titleBar->height());
  210. }
  211. void MainWindow::showMainWidget() { }
  212. void MainWindow::switchTo(QWidget *widget, bool triggerByUser)
  213. {
  214. qDebug() << __FUNCTION__ << __LINE__;
  215. m_stackWidget->setCurrentWidget(widget, !triggerByUser);
  216. }
  217. void MainWindow::slotLogin()
  218. {
  219. initMainPage();
  220. m_mainStackedWidget->setCurrentWidget(m_mainWidget);
  221. m_titleBar->setHidden(false);
  222. }
  223. void MainWindow::slotLogout()
  224. {
  225. m_mainStackedWidget->setCurrentWidget(m_loginView);
  226. m_mainStackedWidget->removeWidget(m_mainWidget);
  227. m_titleBar->setHidden(true);
  228. delete m_mainWidget;
  229. m_mainWidget = nullptr;
  230. }
  231. void MainWindow::slotCancelLogin()
  232. {
  233. exit(0);
  234. }
  235. void MainWindow::homeViewClicked()
  236. {
  237. switchTo(m_homeView);
  238. }
  239. void MainWindow::projectViewClicked()
  240. {
  241. switchTo(m_projectView);
  242. }
  243. void MainWindow::expertViewClicked()
  244. {
  245. switchTo(m_expertManageView);
  246. }
  247. void MainWindow::aboutViewClicked()
  248. {
  249. switchTo(m_aboutView);
  250. }
  251. void MainWindow::dataViewClicked()
  252. {
  253. switchTo(m_evaluateView);
  254. }
  255. void MainWindow::settingViewClicked()
  256. {
  257. switchTo(m_settingView);
  258. }
  259. void MainWindow::userViewClicked()
  260. {
  261. switchTo(m_userView);
  262. }