123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #include "loginwindow.h"
- #include "global.h"
- #include "ui_loginwindow.h"
- LoginWindow::LoginWindow(QWidget *parent)
- : QWidget(parent), ui(new Ui::LoginWindow), manager(new QNetworkAccessManager(this)) {
- ui->setupUi(this);
- ui->username->lineEdit()->setPlaceholderText("请输入用户名");
- // 设置窗口为无边框样式
- setWindowFlags(Qt::FramelessWindowHint);
- }
- LoginWindow::~LoginWindow() { delete ui; }
- void LoginWindow::on_btnLogin_clicked() {
- QString username = ui->username->currentText();
- QString password = ui->password->text();
- if (username.isEmpty() || password.isEmpty()) {
- qDebug() << "Error: Username or password cannot be empty.";
- QMessageBox::critical(nullptr, "输入错误", "用户名或密码不能为空,请重新输入。");
- return;
- }
- try {
- // 构造请求数据
- QJsonObject jsonData;
- jsonData["username"] = username;
- jsonData["password"] = password;
- QJsonDocument doc(jsonData);
- QByteArray data = doc.toJson();
- QUrl localUrl("login/pc");
- QUrl fullUrl = apiBackendUrl.resolved(localUrl);
- qDebug() << "fullUrl" << fullUrl;
- // 构造请求
- // QNetworkRequest request(QUrl("http://localhost:8000/api/v1/login/pc")); //
- // 替换为实际的服务器接口地址
- QNetworkRequest request(
- QUrl("http://localhost:8000/api/v1/login/pc")); // 替换为实际的服务器接口地址
- request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
- // 发送 POST 请求
- QNetworkReply *reply = manager->post(request, data);
- // 处理响应
- QObject::connect(reply, &QNetworkReply::finished, [reply, this]() {
- try {
- if (reply->error() == QNetworkReply::NoError) {
- QByteArray responseData = reply->readAll();
- qDebug() << "Response:" << QString::fromUtf8(responseData);
- // 解析 JSON 响应
- QJsonDocument responseDoc = QJsonDocument::fromJson(responseData);
- if (!responseDoc.isNull() && responseDoc.isObject()) {
- QJsonObject responseObj = responseDoc.object();
- if (responseObj.contains("code") && responseObj["code"].isDouble()) {
- int code = responseObj["code"].toInt();
- // QString Message = responseObj["msg"].toString();
- if (code == 500) {
- // 使用指针动态分配内存
- QMessageBox *msgBox = new QMessageBox;
- msgBox->setAttribute(Qt::WA_TranslucentBackground, true);
- msgBox->setWindowTitle(""); // 清空窗口标题
- msgBox->setText("用户名或密码错误,请重试。");
- msgBox->setWindowFlags(msgBox->windowFlags() |
- Qt::FramelessWindowHint);
- msgBox->setStandardButtons(
- QMessageBox::NoButton); // 不设置标准按钮
- // 设置样式表
- msgBox->setStyleSheet(
- "QMessageBox {"
- " border: none; /* 去除边框 */"
- "}"
- "QLabel {"
- " color: #a94442; /* 标签文字颜色 */"
- " background-color: transparent; /* 标签背景透明 */"
- " font-size: 20px; /* 设置字体大小,可根据需要调整 */"
- "}"
- "QPushButton {"
- " visibility: hidden; /* 隐藏按钮 */"
- "}");
- // 使用 QTimer 在 3 秒后自动关闭消息框
- QTimer::singleShot(1200, msgBox, [msgBox]() {
- msgBox->close();
- delete msgBox; // 释放内存
- });
- msgBox->show();
- } else if (code == 200) {
- // 如果登录成功 存储用户信息 关闭登录接口 打开主界面
- this->close();
- MainWindow *mainWindow = new MainWindow();
- mainWindow->show();
- }
- }
- }
- } else {
- qDebug() << "Error:" << reply->errorString();
- }
- } catch (const std::exception &e) {
- qDebug() << "Exception in response handling: " << e.what();
- }
- reply->deleteLater();
- });
- } catch (const std::exception &e) {
- qDebug() << "Exception in request sending: " << e.what();
- }
- }
|