| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- #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 <QCheckBox>
- #include <QComboBox>
- #include <QDialog>
- #include <QHeaderView>
- #include <QLabel>
- #include <QLineEdit>
- #include <QStatusBar>
- #include <QTableView>
- #include <QJsonArray>
- #include <layoutbuilder.h>
- #include <cwf/constants.h>
- #include <cwf/cppwebapplication.h>
- #include <cwf/filter.h>
- #include <cwf/sqldatabasestorage.h>
- 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;
- 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());
- 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));
- }
- 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<QWebSocket *> clients = WebSocketServer::getInstance()->clients();
- numberOfLinks->setText(QString::number(clients.size()));
- }
|