loginwindow.cpp 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #include "loginwindow.h"
  2. #include "global.h"
  3. #include "ui_loginwindow.h"
  4. LoginWindow::LoginWindow(QWidget *parent)
  5. : QWidget(parent), ui(new Ui::LoginWindow), manager(new QNetworkAccessManager(this)) {
  6. ui->setupUi(this);
  7. ui->username->lineEdit()->setPlaceholderText("请输入用户名");
  8. // 设置窗口为无边框样式
  9. setWindowFlags(Qt::FramelessWindowHint);
  10. }
  11. LoginWindow::~LoginWindow() { delete ui; }
  12. void LoginWindow::on_btnLogin_clicked() {
  13. QString username = ui->username->currentText();
  14. QString password = ui->password->text();
  15. if (username.isEmpty() || password.isEmpty()) {
  16. qDebug() << "Error: Username or password cannot be empty.";
  17. QMessageBox::critical(nullptr, "输入错误", "用户名或密码不能为空,请重新输入。");
  18. return;
  19. }
  20. try {
  21. // 构造请求数据
  22. QJsonObject jsonData;
  23. jsonData["username"] = username;
  24. jsonData["password"] = password;
  25. QJsonDocument doc(jsonData);
  26. QByteArray data = doc.toJson();
  27. QUrl localUrl("login/pc");
  28. QUrl fullUrl = apiBackendUrl.resolved(localUrl);
  29. qDebug() << "fullUrl" << fullUrl;
  30. // 构造请求
  31. // QNetworkRequest request(QUrl("http://localhost:8000/api/v1/login/pc")); //
  32. // 替换为实际的服务器接口地址
  33. QNetworkRequest request(
  34. QUrl("http://localhost:8000/api/v1/login/pc")); // 替换为实际的服务器接口地址
  35. request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
  36. // 发送 POST 请求
  37. QNetworkReply *reply = manager->post(request, data);
  38. // 处理响应
  39. QObject::connect(reply, &QNetworkReply::finished, [reply, this]() {
  40. try {
  41. if (reply->error() == QNetworkReply::NoError) {
  42. QByteArray responseData = reply->readAll();
  43. qDebug() << "Response:" << QString::fromUtf8(responseData);
  44. // 解析 JSON 响应
  45. QJsonDocument responseDoc = QJsonDocument::fromJson(responseData);
  46. if (!responseDoc.isNull() && responseDoc.isObject()) {
  47. QJsonObject responseObj = responseDoc.object();
  48. if (responseObj.contains("code") && responseObj["code"].isDouble()) {
  49. int code = responseObj["code"].toInt();
  50. // QString Message = responseObj["msg"].toString();
  51. if (code == 500) {
  52. // 使用指针动态分配内存
  53. QMessageBox *msgBox = new QMessageBox;
  54. msgBox->setAttribute(Qt::WA_TranslucentBackground, true);
  55. msgBox->setWindowTitle(""); // 清空窗口标题
  56. msgBox->setText("用户名或密码错误,请重试。");
  57. msgBox->setWindowFlags(msgBox->windowFlags() |
  58. Qt::FramelessWindowHint);
  59. msgBox->setStandardButtons(
  60. QMessageBox::NoButton); // 不设置标准按钮
  61. // 设置样式表
  62. msgBox->setStyleSheet(
  63. "QMessageBox {"
  64. " border: none; /* 去除边框 */"
  65. "}"
  66. "QLabel {"
  67. " color: #a94442; /* 标签文字颜色 */"
  68. " background-color: transparent; /* 标签背景透明 */"
  69. " font-size: 20px; /* 设置字体大小,可根据需要调整 */"
  70. "}"
  71. "QPushButton {"
  72. " visibility: hidden; /* 隐藏按钮 */"
  73. "}");
  74. // 使用 QTimer 在 3 秒后自动关闭消息框
  75. QTimer::singleShot(1200, msgBox, [msgBox]() {
  76. msgBox->close();
  77. delete msgBox; // 释放内存
  78. });
  79. msgBox->show();
  80. } else if (code == 200) {
  81. // 如果登录成功 存储用户信息 关闭登录接口 打开主界面
  82. this->close();
  83. MainWindow *mainWindow = new MainWindow();
  84. mainWindow->show();
  85. }
  86. }
  87. }
  88. } else {
  89. qDebug() << "Error:" << reply->errorString();
  90. }
  91. } catch (const std::exception &e) {
  92. qDebug() << "Exception in response handling: " << e.what();
  93. }
  94. reply->deleteLater();
  95. });
  96. } catch (const std::exception &e) {
  97. qDebug() << "Exception in request sending: " << e.what();
  98. }
  99. }