From 21df63ea72b5e603677df505b3499a5aaa1be0f8 Mon Sep 17 00:00:00 2001 From: Pierre Date: Fri, 14 Aug 2026 13:06:02 +0200 Subject: [PATCH] =?UTF-8?q?Corrige=20:=20valeur=20capteur=20toujours=20en?= =?UTF-8?q?=20cha=C3=AEne=20(=C3=A9vite=20le=20figement=20de=20type=20QML)?= =?UTF-8?q?,=20gestionnaire=20OPTIONS=20pour=20le=20preflight=20CORS=20du?= =?UTF-8?q?=20PATCH=20circuit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/main.cpp b/main.cpp index 84cb3e0..e14c6b5 100644 --- a/main.cpp +++ b/main.cpp @@ -511,8 +511,11 @@ int main(int argc, char *argv[]) valeurConvertie = conversion_temperature(valeurBrute, uniteTemperature); symboleUnite = symbole_unite_temperature(uniteTemperature); } - // Arrondi à la précision d'affichage configurée (équivalent toFixed()) : - obj["valeur"] = QString::number(valeurConvertie, 'f', precision).toDouble(); + // Toujours une chaîne (même pour les nombres) - évite que QML + // ne fige le rôle 'valeur' en type numérique lors d'une famille + // visitée avant "Position" (latitude/longitude), qui tronquerait + // alors ces dernières à leur seul chiffre de tête. + obj["valeur"] = QString::number(valeurConvertie, 'f', precision); obj["valeur_texte"] = false; obj["unite"] = symboleUnite; } @@ -626,6 +629,21 @@ int main(int argc, char *argv[]) return withCors(QHttpServerResponse(QJsonDocument(reponse).toJson())); }); + // Réponse au "preflight" CORS (requête OPTIONS automatique du navigateur + // avant tout PATCH avec Content-Type: application/json) - sans elle, le + // navigateur abandonne silencieusement la vraie requête PATCH avant même + // de l'envoyer. + server.route("/elements/circuit/", QHttpServerRequest::Method::Options, + [](int) { + QHttpServerResponse resp(QHttpServerResponder::StatusCode::NoContent); + QHttpHeaders headers = resp.headers(); + headers.append(QHttpHeaders::WellKnownHeader::AccessControlAllowOrigin, "*"); + headers.append(QHttpHeaders::WellKnownHeader::AccessControlAllowMethods, "GET, PATCH, OPTIONS"); + headers.append(QHttpHeaders::WellKnownHeader::AccessControlAllowHeaders, "Content-Type"); + resp.setHeaders(std::move(headers)); + return resp; + }); + auto tcpServer = new QTcpServer(); if (!tcpServer->listen(QHostAddress::Any, 8080) || !server.bind(tcpServer)) { qCritical() << "Impossible de démarrer le serveur HTTP sur le port 8080.";