#include "mainwindow.h" #include "appevent.h" #include "cwf/sqlquery.h" #include "examquestionpage.h" #include "examtestpage.h" #include "gradespage.h" #include "qwebsocket.h" #include "settingspage.h" #include "studentpage.h" #include "tmodel.h" #include "websocketserver.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include static CWF::SqlDatabaseStorage storage("QSQLITE", "localhost", "data.db", "", ""); MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { setCentralWidget(new QWidget(this)); using namespace Layouting; Column{TabWidget{Tab{tr("student"), Row{new StudentPage}}, Tab{tr("exam question"), Row{new ExamsQuestionPage}}, Tab{tr("grades"), Row{new GradesPage}}, Tab{tr("settings"), Column{new SettingsPage}}}, new ExamTestPage } .attachTo(centralWidget()); // 状态栏 ipLabel = new QLabel; wsLabel = new QLabel; CurrentExamQuestions = new QLabel; currentOnlineNumber = new QLabel; numberOfLinks = new QLabel; webLinks = new QLabel; QStatusBar *statusBar = new QStatusBar(this); setStatusBar(statusBar); statusBar->addPermanentWidget(Form{"Ip:", ipLabel, noMargin}.emerge()); statusBar->addPermanentWidget(Form{"WebSocket:", wsLabel, noMargin}.emerge()); statusBar->addPermanentWidget( Form{tr("current default examination questions:"), CurrentExamQuestions, noMargin}.emerge()); statusBar->addPermanentWidget( Form{tr("current online number:"), currentOnlineNumber, noMargin}.emerge()); statusBar->addPermanentWidget(Form{tr("number of links:"), numberOfLinks, noMargin}.emerge()); statusBar->addPermanentWidget(Form{tr("web links:"), webLinks, noMargin}.emerge()); setMinimumSize({960, 600}); AppEvent *appEvent = AppEvent::instance(); { const QString ip = AppEvent::instance()->configValue("serverIP").toString(); const int port = AppEvent::instance()->configValue("serverPort").toInt(); ipLabel->setText(QString("%1:%2").arg(ip).arg(port)); } { const QString ip = AppEvent::instance()->configValue("webSocketIP").toString(); const int port = AppEvent::instance()->configValue("webSocketPort").toInt(); wsLabel->setText(QString("%1:%2").arg(ip).arg(port)); } webLinks->setText(appEvent->isLogin() ? tr("Link") : tr("no Link")); QObject::connect(appEvent, &AppEvent::loginUserSignal, [this](int) { updateStatusBar(); }); QObject::connect(appEvent, &AppEvent::loginOutUserSignal, [this](int) { updateStatusBar(); }); QObject::connect(appEvent, &AppEvent::examQuestionChengeSignal, [this]() { updateStatusBar(); }); QObject::connect(appEvent, &AppEvent::webSocketUpdataSignal, [this]() { updateStatusBar(); }); updateStatusBar(); } MainWindow::~MainWindow() { AppEvent::instance()->configSave(); } void MainWindow::updateStatusBar() { CWF::SqlQuery qry(storage); qint64 all = 0; { qry.exec("SELECT COUNT(*) AS total FROM user;"); QJsonArray array = qry.toJson(); if (!array.isEmpty()) { QJsonObject object = array[0].toObject(); all = object["total"].toVariant().toLongLong(); } } { qry.exec("SELECT COUNT(*) AS total FROM user where state = 1;"); QJsonArray array = qry.toJson(); if (!array.isEmpty()) { QJsonObject object = array[0].toObject(); qint64 total = object["total"].toVariant().toLongLong(); currentOnlineNumber->setText(QString("%1 / %2").arg(total).arg(all)); } } // 题目获取] { ExamsQuestionModel exams(storage); CWF::SqlQueryManager queryManager(storage); queryManager.select("*", exams.getTableName()).where("isSelect = ?"); queryManager.prepare(); queryManager.addBindValue(1); queryManager.exec(); QJsonArray jsonArray = queryManager.toJson(); if (!jsonArray.isEmpty()) { QString dir; QString name; for (const QJsonValue &json : jsonArray) { if (json.isObject()) { QJsonObject obj = json.toObject(); dir = obj["fileDir"].toString(); name = obj["name"].toString(); break; } } CurrentExamQuestions->setText(QString("%1(%2)").arg(name).arg(dir)); } } QList clients = WebSocketServer::getInstance()->clients(); numberOfLinks->setText(QString::number(clients.size())); }