| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- #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 <QCheckBox>
- #include <QComboBox>
- #include <QDialog>
- #include <QHeaderView>
- #include <QLabel>
- #include <QLineEdit>
- #include <QMessageBox>
- #include <QStatusBar>
- #include <QTableView>
- #include <QJsonArray>
- #include <layoutbuilder.h>
- #include "cwf/sqlquery.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", "", "");
- 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<QWebSocket *> 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<QWebSocket *> 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<QWebSocket *> 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);
- }
- }
|