You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ExamSystem/src/frontend/main_window.cc

69 lines
2.3 KiB

#include "main_window.h"
#include <QApplication>
MainWindow::MainWindow(exam_system::BackendInterface* backend, QWidget* parent)
: QMainWindow(parent), backend(backend) {
setWindowTitle("数学学习软件");
setMinimumSize(600, 400);
stackedWidget = new QStackedWidget(this);
setCentralWidget(stackedWidget);
// 创建各个页面
loginWidget = new LoginWidget(backend);
selectionWidget = new SelectionWidget(backend);
questionWidget = new QuestionWidget(backend);
resultWidget = new ResultWidget(backend);
//添加到堆栈
stackedWidget->addWidget(loginWidget);
stackedWidget->addWidget(selectionWidget);
stackedWidget->addWidget(questionWidget);
stackedWidget->addWidget(resultWidget);
//连接信号槽
connect(loginWidget, &LoginWidget::loginSuccess, this, &MainWindow::showSelection);
connect(loginWidget, &LoginWidget::registerSuccess, this, &MainWindow::showSelection);
connect(selectionWidget, &SelectionWidget::startRequest, this, &MainWindow::showQuestions);
connect(selectionWidget, &SelectionWidget::logoutRequested, this, &MainWindow::logout);
connect(questionWidget, &QuestionWidget::testCompleted, this, &MainWindow::showResult);
connect(resultWidget, &ResultWidget::restartTest, this, &MainWindow::restartFromResult);
connect(resultWidget, &ResultWidget::exitTest, this, &MainWindow::onExitTest);
// 显示登录页面
stackedWidget->setCurrentWidget(loginWidget);
}
void MainWindow::showSelection(const QString& userName) {
selectionWidget->setCurrentUserName(userName);
stackedWidget->setCurrentWidget(selectionWidget);
}
void MainWindow::showQuestions(const QString& difficulty, int count) {
questionWidget->startTest(difficulty, count);
stackedWidget->setCurrentWidget(questionWidget);
}
void MainWindow::showResult(const exam_system::TestResult& result) {
resultWidget->showResult(result);
stackedWidget->setCurrentWidget(resultWidget);
}
void MainWindow::restartFromResult() {
stackedWidget->setCurrentWidget(selectionWidget);
}
void MainWindow::logout(){
backend->UserLogout();
selectionWidget->setCurrentUserName("");
loginWidget->clearInputs();
stackedWidget->setCurrentWidget(loginWidget);
}
void MainWindow::onExitTest(){
backend->UserExit();
QApplication::quit();
}