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.
69 lines
2.3 KiB
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();
|
|
} |