#include "MainWindow.h" #include "CustomTitleBar.h" #include "HomeView.h" #include "ProjectView.h" #include "ExpertManageView.h" #include "EvaluateView.h" #include "LoginView.h" #include "AboutView.h" #include #include #include #include StackedWidget::StackedWidget(QWidget *parent) : QFrame(parent) { m_hBoxLayout = new QHBoxLayout(this); m_view = new PopUpAniStackedWidget(this); m_hBoxLayout->setContentsMargins(0, 0, 0, 0); m_hBoxLayout->addWidget(m_view); connect(m_view, &PopUpAniStackedWidget::currentChanged, this, [this](int index) { emit currentWidgetChanged(m_view->widget(index)); }); QPalette pal(palette()); pal.setColor(QPalette::Background, QColor("#fffff8")); setAutoFillBackground(true); setPalette(pal); } void StackedWidget::addWidget(QWidget *widget) { m_view->addWidget(widget); } /// /// @todo widget.verticalScrollBar().setValue(0) /// void StackedWidget::setCurrentWidget(QWidget *widget, bool popOut) { if (popOut) { m_view->setCurrentWidget(widget, true, false, 200, QEasingCurve::InQuad); } else { m_view->setCurrentWidget(widget, false, true, 300); } } void StackedWidget::setCurrentIndex(int index, bool popOut) { setCurrentWidget(m_view->widget(index), popOut); } PopUpAniStackedWidget *StackedWidget::view() const { return m_view; } MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { initialize(); initWindow(); initLayout(); initNavigation(); connectSignalsAndSlots(); } MainWindow::~MainWindow() { } void MainWindow::initialize() { m_titleBar = new CustomTitleBar(this); m_widgetLayout = new QHBoxLayout(); m_stackWidget = new StackedWidget(this); m_naviInterface = new NavigationInterface(true, true, this); m_homeView = new HomeView(this); m_loginView = new LoginView(this); m_projectView = new ProjectView(this); m_evaluateView = new EvaluateView(this); m_expertManageView = new ExpertManageView(this); m_aboutView = new AboutView(this); } void MainWindow::initWindow() { setMinimumSize(QSize(1000, 800)); QFramelessHelper *helper = new QFramelessHelper(this); helper->setTitleBar(m_titleBar); QWidget *w = new QWidget(); m_hBoxLayout = new QHBoxLayout(w); setCentralWidget(w); m_titleBar->setGeometry(QRect(titleBarIndent(), 0, width() - titleBarIndent(), m_titleBar->height())); setWindowTitle("专家评定数据分析软件"); QIcon icon = QIcon(":/resource/logo.png"); m_titleBar->setIcon(icon); setWindowIcon(icon); } void MainWindow::initLayout() { m_hBoxLayout->setSpacing(0); m_hBoxLayout->setContentsMargins(0, 0, 0, 0); m_hBoxLayout->addWidget(m_naviInterface); m_hBoxLayout->addLayout(m_widgetLayout); m_hBoxLayout->setStretchFactor(m_widgetLayout, 1); m_widgetLayout->addWidget(m_stackWidget); m_widgetLayout->setContentsMargins(0, 32, 0, 0); } void MainWindow::initNavigation() { m_homeView->setObjectName("homeView"); m_stackWidget->addWidget(m_homeView); m_naviInterface->addItem(m_homeView->objectName(), NEWFLICON(FluentIcon, HOME), "首页", this, SLOT(homeViewClicked())); m_projectView->setObjectName("projectView"); m_stackWidget->addWidget(m_projectView); m_naviInterface->addItem(m_projectView->objectName(), NEWFLICON(FluentIcon, DOCUMENT), "工程", this, SLOT(projectViewClicked())); m_expertManageView->setObjectName("expertManageView"); m_stackWidget->addWidget(m_expertManageView); m_naviInterface->addItem(m_expertManageView->objectName(), NEWFLICON(FluentIcon, SETTING), "专家信息管理", this, SLOT(expertViewClicked())); m_evaluateView->setObjectName("evaluateView"); m_stackWidget->addWidget(m_evaluateView); m_naviInterface->addItem(m_evaluateView->objectName(), NEWFLICON(FluentIcon, BOOK_SHELF), "评估数据分析", this, SLOT(dataViewClicked())); m_naviInterface->addSeparator(); m_loginView->setObjectName("loginView"); m_stackWidget->addWidget(m_loginView); m_naviInterface->addItem(m_loginView->objectName(), NEWFLICON(FluentIcon, HEART), "用户", this, SLOT(loginViewClicked()), true, NavigationItemPosition::BOTTOM); m_aboutView->setObjectName("aboutView"); m_stackWidget->addWidget(m_aboutView); m_naviInterface->addItem(m_aboutView->objectName(), NEWFLICON(FluentIcon, INFO), "关于", this, SLOT(aboutViewClicked()), true, NavigationItemPosition::BOTTOM); m_naviInterface->setDefaultRouteKey(m_homeView->objectName()); connect(m_stackWidget, &StackedWidget::currentWidgetChanged, this, [this](QWidget *w) { m_naviInterface->setCurrentItem(w->objectName()); }); m_naviInterface->setCurrentItem(m_homeView->objectName()); m_stackWidget->setCurrentIndex(0); } void MainWindow::connectSignalsAndSlots() { connect(m_naviInterface, &NavigationInterface::displayModeChanged, m_titleBar, &StandardTitleBar::raise); } void MainWindow::setNaviInterfaceHidden(bool hidden) { m_naviInterface->setHidden(hidden); m_titleBar->setGeometry(QRect(titleBarIndent(), 0, width() - titleBarIndent(), m_titleBar->height())); } int MainWindow::titleBarIndent() const { return m_naviInterface->isHidden() ? 0 : 46; } void MainWindow::resizeEvent(QResizeEvent *event) { Q_UNUSED(event) m_titleBar->resize(width() - titleBarIndent(), m_titleBar->height()); } void MainWindow::switchTo(QWidget *widget, bool triggerByUser) { qDebug() << __FUNCTION__ << __LINE__; m_stackWidget->setCurrentWidget(widget, !triggerByUser); } void MainWindow::homeViewClicked() { switchTo(m_homeView); } void MainWindow::loginViewClicked() { switchTo(m_loginView); } void MainWindow::projectViewClicked() { switchTo(m_projectView); } void MainWindow::expertViewClicked() { switchTo(m_expertManageView); } void MainWindow::aboutViewClicked() { switchTo(m_aboutView); } void MainWindow::dataViewClicked() { switchTo(m_evaluateView); }