Import initial du projet shipheart_cm5

This commit is contained in:
2026-08-13 09:19:38 +02:00
commit 53e47729fb
533 changed files with 127946 additions and 0 deletions
+143
View File
@@ -0,0 +1,143 @@
#include "systeme.h"
#include <QDebug>
Systeme::Systeme() : QObject()
{
}
//================================================================================================================================
// Fonction : Lit le contenu d'un fichier texte et le retourne
// Reçoit : Le nom du fichier
// Retour : Une ligne "Ok" ou "Nok" représentant le résultat de la lecture puis la liste des lignes lues dans le fichier.
//================================================================================================================================
QStringList Systeme::lecture_fichier(QString fichier)
{
QStringList retour;
QFile file(fichier); // Appel du constructeur de la classe QFile
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) // Si l'ouverture du fichier en lecture à réussie
{
//qDebug() << "Ouverture du fichier [" << fichier << "] en lecture effectué avec succès !";
retour << "Ok";
QTextStream entree(&file);
while(!entree.atEnd()) // Boucle sur toutes les lignes du fichier (attention, il y en a toujours une de plus à la fin...)
{
QString ligne = entree.readLine(); // Lecture de la ligne
retour << ligne; // Ajout à la structure de retour
//qDebug() << "Ligne lue dans le fichier : " << ligne;
}
file.close(); // Fermeture du fichier
}
else
{
qDebug() << "Erreur d'ouverture du fichier [" << fichier << "]. La lecture est abandonnée...";
retour << "Nok";
}
return(retour);
}
//================================================================================================================================
// Fonction : Lit le contenu d'un fichier texte et le retourne
// Reçoit : Le nom du fichier
// Retour : 0 si Ok, -1 si Nok
//================================================================================================================================
qint8 Systeme::ecriture_fichier(QString fichier, QStringList lignes)
{
QFile file(fichier); // Appel du constructeur de la classe QFile
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) // Si l'ouverture du fichier en écriture à réussie
{
//qDebug() << "Ouverture du fichier [" << fichier << "] en écriture effectué avec succès !";
QTextStream sortie(&file);
for ( const auto& ligne : lignes )
{
sortie << ligne << "\n";
//qDebug() << "Ligne écrite dans le fichier : " << ligne;
}
file.close(); // Fermeture du fichier
return(0);
}
else
{
qDebug() << "Erreur d'ouverture du fichier [" << fichier << "]. L'écriture est abandonnée...";
return(-1);
}
}
//===================================================================================================
// Fonction : Exécute la commande shelle reçue, attend la fin d'exécution et renvoi la réponse de
// la commande.
// Reçoit : la chaine de la commande
// Renvoit : La chaine de retour de la commande
//===================================================================================================
QString Systeme::commande_shell(QString commande, QString fichier_sortie)
{
//qDebug() << "Commande shell à lancer = [" << commande << "]";
QProcess process;
// Mise en place du fichier de sortie :
// ATTENTION : l'utilisation d'une redirection du type ' > fichier_sortie' ne fonctionne PAS avec QProcess...
if (fichier_sortie != "") process.setStandardOutputFile(fichier_sortie);
// Lancement de la commande :
// process.start(commande);
// Modif de 08/2026 lors du passage à Qt6 sur CM5 : l'appel direct ne fonctionnait pas avec certaines commandes précédée de sudo.
// Le version ci-dessous fait le découpage <commande><argument>...<argument> avant d'appeler la fonction de start avec le découpage déjà fait.
// Résoud le problème mais sans savoir exactement ce qui bloquait dans la commande précédente...
QStringList args = QProcess::splitCommand(commande);
QString programme = args.takeFirst();
process.start(programme, args);
// Attente de la fin d'exécution :
// ATTENTION : on bloque l'éxécution jusqu'à la fin de la commande...!
process.waitForFinished();
//qDebug() << "QProcess error() =" << process.error();
//qDebug() << "QProcess exitCode() =" << process.exitCode();
//qDebug() << "QProcess exitStatus() =" << process.exitStatus();
// QThread::msleep(5);
QString out(process.readAllStandardOutput());
// qDebug()<<"Sortie standard = "<<out;
QString err(process.readAllStandardError());
if (!err.isEmpty()) qDebug() << "Erreur commande shell [" << commande << "] : " << err;
//qDebug() << "Commande shell [" << commande << "] terminée";
return(out);
}
//===================================================================================================
// Fonction : Exécute la commande shelle reçue et retourne à la fonction appelante sans attendre
// la fin d'exécution.
// Reçoit : la chaine de la commande
// Renvoit : Rien
//===================================================================================================
void Systeme::commande_shell_non_bloquante(QString commande)
{
//qDebug() << "Commande shell à lancer = [" << commande << "]";
QProcess process;
// Lancement de la commande :
process.startDetached(commande); // Permer d'oublier le processus une fois lancé (sinon, on peut générer une erreur du type "QProcess: Destroyed while process ("sudo") is still running.")
}