#include "examtestpage.h" #include "qdatetime.h" #include "qlineedit.h" #include "websocketserver.h" #include "appevent.h" #include "tmodel.h" #include "widgets/examsmodel.h" #include "widgets/pagination.h" #include #include #include #include #include #include #include #include #include #include #include #include "cwf/sqlquery.h" #include #include #include #include static CWF::SqlDatabaseStorage storage("QSQLITE", "localhost", "data.db", "", ""); ExamTestPage::ExamTestPage(QWidget *parent) : QWidget{parent} { using namespace Layouting; examRoomLineEdit = new QLineEdit; examNumberLineEdit = new QLineEdit; Column{Form{ tr("exam room"), examRoomLineEdit, tr("exam number"), examNumberLineEdit, }, br, Grid{ PushButton{text(tr("send exam text")), onClicked([this]() { sendExamText(); })}, PushButton{text(tr("Begin the exam")), onClicked([this]() { beginExam(); })}, PushButton{text(tr("un Lock Screen")), onClicked([this]() { unLockScreen(); })}, }} .attachTo(this); connect(examRoomLineEdit, &QLineEdit::textChanged, [this](const QString &) { const QString &test = examRoomLineEdit->text(); AppEvent::instance()->setConfigValue("examRoom", test); }); connect(examNumberLineEdit, &QLineEdit::textChanged, [this](const QString &) { const QString &test = examNumberLineEdit->text(); AppEvent::instance()->setConfigValue("examNumber", test); }); const QVariant examRoomValue = AppEvent::instance()->configValue("examRoom"); const QVariant examNumberValue = AppEvent::instance()->configValue("examNumber"); examRoomLineEdit->setText(examRoomValue.toString()); examNumberLineEdit->setText(examNumberValue.toString()); AppEvent::instance()->setExam(examRoomValue.toString(), examNumberValue.toString()); } void ExamTestPage::updateExamView() { } void ExamTestPage::sendExamText() { QList clients = WebSocketServer::getInstance()->clients(); for (auto client : clients) { QJsonObject param; param.insert("method", "request"); // 获取方式 param.insert("request", "examContent"); // 请求数据 QJsonObject object; object.insert("status", true); object.insert("message", true); object.insert("code", 200); object.insert("data", param); QJsonDocument jsonDoc(object); QString jsonString = jsonDoc.toJson(QJsonDocument::Compact); client->sendTextMessage(jsonString); } } void ExamTestPage::beginExam() { // 题目获取] QString examsQuestion; { 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(); examsQuestion = QString("%1(%2)").arg(name).arg(dir); break; } } } } if (examsQuestion.isEmpty()) { QMessageBox msgBox; msgBox.setText(tr("info")); msgBox.setInformativeText(tr("Please set exam questions first")); msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); msgBox.setDefaultButton(QMessageBox::Ok); msgBox.setButtonText(QMessageBox::Ok, tr("OK")); msgBox.setButtonText(QMessageBox::Cancel, tr("Cancel")); msgBox.exec(); return; } QMessageBox msgBox; msgBox.setInformativeText(QString(tr("The current exam question is:%1")).arg(examsQuestion)); msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); msgBox.setDefaultButton(QMessageBox::Ok); msgBox.setButtonText(QMessageBox::Ok, tr("OK")); msgBox.setButtonText(QMessageBox::Cancel, tr("Cancel")); int ret = msgBox.exec(); if (ret == QMessageBox::Ok) { const QString &examRoom = examRoomLineEdit->text(); const QString &examNumber = examNumberLineEdit->text(); AppEvent::instance()->setExam(examRoom, examNumber); qint64 time = QDateTime::currentSecsSinceEpoch(); QList clients = WebSocketServer::getInstance()->clients(); for (auto client : clients) { QJsonObject param; param.insert("method", "notice"); // 获取方式 param.insert("notice", "startExam"); // param.insert("time", time); // QJsonObject object; object.insert("status", true); object.insert("message", true); object.insert("code", 200); object.insert("data", param); QJsonDocument jsonDoc(object); QString jsonString = jsonDoc.toJson(QJsonDocument::Compact); client->sendTextMessage(jsonString); } } } void ExamTestPage::unLockScreen() { QList clients = WebSocketServer::getInstance()->clients(); for (auto client : clients) { QJsonObject param; param.insert("method", "notice"); // 获取方式 param.insert("notice", "unLockScreen"); // QJsonObject object; object.insert("status", true); object.insert("message", true); object.insert("code", 200); object.insert("data", param); QJsonDocument jsonDoc(object); QString jsonString = jsonDoc.toJson(QJsonDocument::Compact); client->sendTextMessage(jsonString); } }