MainWindow.cpp 4.9 KB

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