1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
| #include "mainwindow.h" #include <QJsonDocument> #include <QJsonObject> #include <QDateTime> #include <QTimeZone> #include <QTimer> #include <QDebug>
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , manager(new QNetworkAccessManager(this)) , timer(new QTimer(this)) , updateTimeTimer(new QTimer(this)) , retryCount(0) { this->setGeometry(0, 0, 800, 480);
label = new QLabel(this); label->setGeometry(400, 200, 200, 50);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(handleNetworkReply(QNetworkReply*)));
connect(updateTimeTimer, &QTimer::timeout, this, &MainWindow::updateLocalTime); updateTimeTimer->start(1000);
timer->start(30000); connect(timer, &QTimer::timeout, this, &MainWindow::fetchTime);
fetchTime(); }
MainWindow::~MainWindow() {}
void MainWindow::updateLocalTime() { QDateTime currentTime = QDateTime::currentDateTime(); label->setText("本地时间:" + currentTime.toString("yyyy-MM-dd hh:mm:ss")); }
void MainWindow::fetchTime() { QUrl url("http://quan.suning.com/getSysTime.do"); QNetworkRequest request(url); qDebug() << "发送请求:" << url;
manager->get(request); }
void MainWindow::handleNetworkReply(QNetworkReply *reply) { if (reply->error() != QNetworkReply::NoError) { qDebug() << "网络错误:" << reply->errorString();
if (retryCount < maxRetryCount) { retryCount++; qDebug() << "重试次数:" << retryCount; fetchTime(); } else { label->setText("获取时间失败,已达到最大重试次数"); qDebug() << "获取时间失败,已达到最大重试次数"; }
reply->deleteLater(); return; }
QByteArray responseData = reply->readAll(); qDebug() << "收到响应:" << responseData;
QJsonParseError parseError; QJsonDocument jsonDoc = QJsonDocument::fromJson(responseData, &parseError); if (parseError.error != QJsonParseError::NoError) { label->setText("JSON解析失败:" + parseError.errorString()); qDebug() << "JSON解析错误:" << parseError.errorString(); reply->deleteLater(); return; }
QJsonObject obj = jsonDoc.object(); QString timeStr = obj.value("sysTime2").toString(); QDateTime networkTime = QDateTime::fromString(timeStr, "yyyy-MM-dd HH:mm:ss");
QDateTime localTime = QDateTime::currentDateTime();
qint64 timeDiff = networkTime.toMSecsSinceEpoch() - localTime.toMSecsSinceEpoch(); qDebug() << "时间误差:" << timeDiff << "毫秒";
if (qAbs(timeDiff) > 2000) { qDebug() << "误差大于2秒,进行修正"; label->setText("本地时间已修正:" + networkTime.toString("yyyy-MM-dd hh:mm:ss")); }
reply->deleteLater();
retryCount = 0; }
|