#include "settingspage.h" #include "appevent.h" #include "qglobal.h" #include "qjsonobject.h" #include "qlineedit.h" #include "qpainter.h" #include "qspinbox.h" #include "tmodel.h" #include "widgets/examsmodel.h" #include "widgets/pagination.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "cwf/sqlquery.h" #include #include #include #include #include "teachertr.h" static CWF::SqlDatabaseStorage storage("QSQLITE", "localhost", "data.db", "", ""); SettingsPage::SettingsPage(QWidget *parent) : QWidget{parent} { examContentDirLineEdit = new QLineEdit; windowXSpinBox = new QSpinBox; windowYSpinBox = new QSpinBox; windowXSpinBox->setRange(0, 3000); windowYSpinBox->setRange(0, 3000); examAnswerDirLineEdit = new QLineEdit; lockMaxTimeSpinBox = new QSpinBox; lockMaxTimeSpinBox->setRange(0, 999999999); lockMaxTimeSpinBox->setToolTip(tr("Setting to 0 means unlimited time")); // 教师端 answerDirLineEdit = new QLineEdit; using namespace Layouting; auto student = Group{title(tr("student configuration")), Form{tr("exam content dir:"), examContentDirLineEdit, PushButton{text(tr("open dir")), onClicked([this]() { const QString dir = QFileDialog::getExistingDirectory( this, QObject::tr("选择目录"), "./", QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); examContentDirLineEdit->setText(dir); })}, br, tr("window x:"), windowXSpinBox, tr("window y:"), windowYSpinBox, st, br, tr("exam answer dir:"), examAnswerDirLineEdit, PushButton{text(tr("open dir")), onClicked([this]() { const QString dir = QFileDialog::getExistingDirectory( this, QObject::tr("选择目录"), "./", QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); examAnswerDirLineEdit->setText(dir); })}, br, tr("lock max time"), lockMaxTimeSpinBox, tr("s")}}; auto teacher = Group{title(tr("teacher configuration")), Form{ tr("answer dir:"), answerDirLineEdit, PushButton{text(tr("open dir")), onClicked([this]() { const QString dir = QFileDialog::getExistingDirectory( this, QObject::tr("选择目录"), "./", QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); answerDirLineEdit->setText(dir); })}, }}; Column{student, teacher}.attachTo(this); // init config const QVariant examContentDir = AppEvent::instance()->configValue("examContentDir"); const QVariant windowX = AppEvent::instance()->configValue("windowX"); const QVariant windowY = AppEvent::instance()->configValue("windowY"); const QVariant examAnswerDir = AppEvent::instance()->configValue("examAnswerDir"); const QVariant lockMaxTime = AppEvent::instance()->configValue("lockMaxTime"); examContentDirLineEdit->setText(examContentDir.toString()); windowXSpinBox->setValue(windowX.toInt()); windowYSpinBox->setValue(windowY.toInt()); examAnswerDirLineEdit->setText(examAnswerDir.toString()); lockMaxTimeSpinBox->setValue(lockMaxTime.toInt()); // 教师端 const QVariant answerDir = AppEvent::instance()->configValue("answerDir"); answerDirLineEdit->setText(answerDir.toString()); // 学生端 connect(examContentDirLineEdit, &QLineEdit::textChanged, [this](const QString &) { const QString &test = examContentDirLineEdit->text(); AppEvent::instance()->setConfigValue("examContentDir", test); }); connect(windowXSpinBox, QOverload::of(&QSpinBox::valueChanged), [](int value) { AppEvent::instance()->setConfigValue("windowX", value); }); connect(windowYSpinBox, QOverload::of(&QSpinBox::valueChanged), [](int value) { AppEvent::instance()->setConfigValue("windowY", value); }); connect(examAnswerDirLineEdit, &QLineEdit::textChanged, [this](const QString &) { const QString &test = examAnswerDirLineEdit->text(); AppEvent::instance()->setConfigValue("examAnswerDir", test); }); connect(lockMaxTimeSpinBox, QOverload::of(&QSpinBox::valueChanged), [](int value) { AppEvent::instance()->setConfigValue("lockMaxTime", value); }); // 教师端 connect(answerDirLineEdit, &QLineEdit::textChanged, [this](const QString &) { const QString &test = answerDirLineEdit->text(); AppEvent::instance()->setConfigValue("answerDir", test); }); }