#include "tlogin.h" #include "appevent.h" #include "qlabel.h" #include "qlineedit.h" #include #include #include #include #include "qpushbutton.h" #include "qstyle.h" #include "qwidget.h" #include "utils/layoutbuilder.h" #include "api/tloginapi.h" TLogin::TLogin(QWidget *parent) : QDialog(parent) { setObjectName("Login"); setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); setWindowTitle(tr("Login")); using namespace Layouting; info = new QLabel; info->setStyleSheet("color: white;"); info->setText(tr("link failure")); // 创建登录组件 usernameEdit = new QLineEdit(); usernameEdit->setPlaceholderText(tr("Enter your user name")); passwordEdit = new QLineEdit(); // passwordEdit->setEchoMode(QLineEdit::Password); passwordEdit->setPlaceholderText(tr("Enter your ExamNo")); // QRegExp regExp("[a-zA-Z0-9]{6,12}"); // QValidator *validator = new QRegExpValidator(regExp, passwordEdit); // passwordEdit->setValidator(validator); QWidget *w = Group{Column{Row{st, tr("Login"), st}, Form{tr("Username:"), usernameEdit, br, tr("ExamNo:"), passwordEdit}, PushButton{bindTo(&loginPushButton), text(tr("Login")), onClicked(std::bind(&TLogin::on_login_clicked, this))}}} .emerge(); QPushButton *close; auto h = Row{"", st, PushButton{bindTo(&close), "test"}}; Column{h, st, Row{st, w, st}, st, info, noMargin}.attachTo(this); QString styleSheet = R"( QDialog#Login { background-image: url(:/bg/bg1.png); } QGroupBox { background-color: rgba(255, 255, 255, 128); } )"; setStyleSheet(styleSheet); QPixmap closePix = style()->standardPixmap(QStyle::SP_TitleBarCloseButton); close->setIcon(closePix); close->setStyleSheet(R"__( QPushButton { border: none; background-color: #ffffff; /* 红色背景 */ color: white; /* 文字颜色 */ padding: 10px 10px; /* 内边距 */ text-align: center; /* 文字居中 */ text-decoration: none; /* 去掉下划线 */ font-size: 12px; /* 字体大小 */ margin: 2px 2px; /* 外边距 */ border-radius: 10px; /* 圆角 */ } QPushButton:hover { background-color: #d32f2f; /* 鼠标悬停时背景色 */ } )__"); resize({400, 400}); // usernameEdit->setText("test"); // passwordEdit->setText("SW1111112"); loginPushButton->setDisabled(true); QObject::connect(close, &QPushButton::clicked, this, &TLogin::close); // QObject::connect(AppEvent::instance(), &AppEvent::serverLinkSignals, this, [this](bool isok) { // if (isok) { // info->setText(tr("link succeeded")); // loginPushButton->setDisabled(false); // } else { // info->setText(tr("link failure")); // loginPushButton->setDisabled(true); // } // }); } void TLogin::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { m_dragPosition = event->globalPos() - frameGeometry().topLeft(); event->accept(); } } void TLogin::mouseMoveEvent(QMouseEvent *event) { if (event->buttons() & Qt::LeftButton) { move(event->globalPos() - m_dragPosition); event->accept(); } } void TLogin::on_login_clicked() { const QString userName = usernameEdit->text(); const QString password = passwordEdit->text(); if (userName.isEmpty() || password.isEmpty()) { QMessageBox::warning(this, tr("Login failed"), tr("User name or password error, please try again.")); return; } bool ok = TC::Login(userName, password).post(); if (ok && AppEvent::instance()->isLogin()) { // 登录成功,发出信号 emit loginSuccessful(); close(); } else { // 登录失败,显示提示框 QMessageBox::warning(this, tr("Login failed"), tr("User name or password error, please try again.")); return; } }