IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Créer un formulaire selon un fichier XML

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 47
    Points : 18
    Points
    18
    Par défaut Créer un formulaire selon un fichier XML
    Bonjour,

    Comme indique le titre j'aimerais lier XML et Qt Creator.
    Je voudrais élaborer un fichier XML depuis Qt.

    Application graphique :
    Nom : dialog.png
Affichages : 534
Taille : 61,3 Ko

    Voici le bouton pour l'enregistrer sous format XML :
    Nom : Capture du 2018-03-20 10-45-08.png
Affichages : 503
Taille : 80,8 Ko

    Le voici dans le .cpp :
    Nom : Capture du 2018-03-20 10-47-58.png
Affichages : 519
Taille : 63,6 Ko

    Fichier XSD :
    Nom : xsd.png
Affichages : 638
Taille : 86,6 Ko

    Fichier XML :
    Nom : xml.png
Affichages : 479
Taille : 34,2 Ko

    Le fichier est réalisé depuis un logiciel nommé Editix, maintenant je voudrais faire de même depuis Qt Creator avec les valeurs choisi préalablement depuis les Thermo (1ere image)

    Savez-vous comment faire ?

    Merci

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Points : 421
    Points
    421
    Par défaut
    Bonjour,

    Le fomat du fichier XML peut être validé en utilisant les classes QXmLSchema et QXmlSchemaValidator . Un exemple est disponible XML Schema Validation Example

    Ensuite pour créer un fichier XML depuis Qt, il y a plusieurs possibilités comme QXmlStreamWriter ou QDomDocument.

    Dans votre cas, QXmlStreamWriter devrait être suffisant.

    Voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
        QFile output("test.xml");
        if(output.open(QFile::WriteOnly)){
            QXmlStreamWriter stream(&output);
            stream.setAutoFormatting(true);
            stream.writeStartDocument();
     
            //SUPREM
            stream.writeStartElement("SUPREM");
            stream.writeAttribute("xsi:noNamespaceSchemaLocation", "C:\\Path\\to\\file.xsd");
            //Valeurs
            stream.writeStartElement("Valeurs");
            stream.writeTextElement("RF", QString::number(qrand() % 256));
            stream.writeTextElement("MPX", QString::number(qrand() % 256));
            stream.writeTextElement("Pilot", QString::number(qrand() % 256));
            stream.writeTextElement("RDS", QString::number(qrand() % 256));
            stream.writeTextElement("AG", QString::number(qrand() % 256));
            stream.writeTextElement("AD", QString::number(qrand() % 256));
            stream.writeTextElement("Tension", QString::number(qrand() % 256));
            stream.writeTextElement("Frequence", QString::number(qrand() % 65536));
            stream.writeEndElement(); // Valeurs
            stream.writeEndElement(); // SUPREM
     
            stream.writeEndDocument();
        }
        output.flush();
        output.close();
    Le résultat.
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="UTF-8"?>
    <SUPREM xsi:noNamespaceSchemaLocation="C:\Path\to\file.xsd">
        <Valeurs>
            <RF>41</RF>
            <MPX>35</MPX>
            <Pilot>190</Pilot>
            <RDS>132</RDS>
            <AG>225</AG>
            <AD>108</AD>
            <Tension>214</Tension>
            <Frequence>29358</Frequence>
        </Valeurs>
    </SUPREM>

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Points : 421
    Points
    421
    Par défaut
    Pour relire le contenu du fichier XML depuis Qt, voici une méthode possible avec QStreamXmlReader:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    QFile input("test.xml");
        if(input.open(QFile::ReadOnly)){
            QXmlStreamReader stream(&input);
            stream.addExtraNamespaceDeclaration(QXmlStreamNamespaceDeclaration("xsi", "noNamespaceSchemaLocation"));
            QTextStream out(stdout);
            if (stream.readNextStartElement()) {
                if (stream.name() == "SUPREM"){
     
     
                    QStringRef xsiNoNamespaceSchemaLocation = stream.attributes().value("xsi:noNamespaceSchemaLocation");
     
                    bool documentIsValid = true;
                    /*
                    //Validation avec le fichier xsd si nécessaire.
                    QXmlSchema schema;
                    schema.load(xsiNoNamespaceSchemaLocation.toLatin1());
     
                    if (schema.isValid()) {
                        QFile file("test.xml");
                        file.open(QIODevice::ReadOnly);
     
                        QXmlSchemaValidator validator(schema);
                        if (validator.validate(&file, QUrl::fromLocalFile(file.fileName()))){
                            qDebug() << "instance document is valid";
                        } else {
                            out << "Schéma XML invalide";
                            documentIsValid = false;
                        }
                    } else out << "Fichier XSD invalide";
                    */
     
                    if(documentIsValid){
                        if(stream.readNextStartElement()) {
                            if (stream.name() == "Valeurs"){
                                while(stream.readNextStartElement()){
     
                                    //Affichage de tous les éléments contenus dans "Valeurs"
                                    out << stream.name() << ": " << stream.readElementText() << endl;
                                }
     
                            } else out << "Elément \"Valeurs\" manquant";
                        } else out << "Format de fichier incorrect";
                    }
                } else out << "Elément \"SUPREM\" manquant";
     
            }
            if (stream.hasError()) {
                out << "Error: " << stream.errorString();
            }
        }
     
        input.close();
    sortie console:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    RF: 41
    MPX: 35
    Pilot: 190
    RDS: 132
    AG: 225
    AD: 108
    Tension: 214
    Frequence: 29358

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 47
    Points : 18
    Points
    18
    Par défaut
    Ce programme je le mets dans quel méthode ?

    Enfin je veux dire que j'ai un Pushbouton "ButtonXML", je mets le programme dans cette méthode ?
    Dans ce cas lors de l'appui sur ce bouton, je peux l'enregistrer sous format XML.

    Et oui j'avais pensés à QDomDocument ou QXmlStreamWriter mais je savais pas lequel utiliser.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Points : 421
    Points
    421
    Par défaut
    Oui par exemple lorsque le bouton "Exporter XML" est cliqué, à vous de voir comment vous voulez implémenter cela.

    N'hésitez pas à essayer les projets exemples de Qt afin de mieux comprendre le fonctionnement de certaines classes. Je pense qu'il y en a plusieurs disponible concernant QDomDocument et QXmlStreamWriter. La doc contient souvent aussi pas mal d'extraits de code assez explicites.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    programmation
    Inscrit en
    Mars 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : programmation

    Informations forums :
    Inscription : Mars 2018
    Messages : 1
    Points : 1
    Points
    1
    Par défaut remerciements
    Bonjour a vous membres du forum club.
    j'aimerai vous remercier pour l'accès a vôtre site que vous m'avez offert.
    Nouveau en programmation informatique ( langageC++) que je suis, cette adhésion m'ouvrira énormément les yeux sur les procédures d'utilisation des langages de programmation. Pour ce fait, j'ai énormément besoin de vôtre soutien et éclaircissements!

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 47
    Points : 18
    Points
    18
    Par défaut
    Bonjour,

    Donc oui je vais utiliser QXmlStreamWriter.

    J'ai tapé ce code dans la méthode "ButtonXML" mais rien ne se passe en appuyant sur le bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
        QFile output("test.xml");
        if(output.open(QFile::WriteOnly)){
            QXmlStreamWriter stream(&output);
            stream.setAutoFormatting(true);
            stream.writeStartDocument();
     
            //SUPREM
            stream.writeStartElement("SUPREM");
            stream.writeAttribute("xsi:noNamespaceSchemaLocation", "C:\\Path\\to\\file.xsd");
            //Valeurs
            stream.writeStartElement("Valeurs");
            stream.writeTextElement("RF", QString::number(qrand() % 256));
            stream.writeTextElement("MPX", QString::number(qrand() % 256));
            stream.writeTextElement("Pilot", QString::number(qrand() % 256));
            stream.writeTextElement("RDS", QString::number(qrand() % 256));
            stream.writeTextElement("AG", QString::number(qrand() % 256));
            stream.writeTextElement("AD", QString::number(qrand() % 256));
            stream.writeTextElement("Tension", QString::number(qrand() % 256));
            stream.writeTextElement("Frequence", QString::number(qrand() % 65536));
            stream.writeEndElement(); // Valeurs
            stream.writeEndElement(); // SUPREM
     
            stream.writeEndDocument();
        }
        output.flush();
        output.close();

    Déclaration de ButtonXML :
    h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     void on_ButtonXML_clicked();
    .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void Dialog::on_ButtonXML_clicked()
    {
    }

    Je penses que je m'y prend mal, j'ai sûrement oublié de faire quelques choses.

  8. #8
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Points : 421
    Points
    421
    Par défaut
    Avez-vous connecté la fonction au signal du bouton de l'interface graphique ?
    Par exemple dans le constructeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dialog::Dialog(QWidget *parent) : QDialog(parent)
    {
    //...
    connect(ui->boutonExport, &QPushButton::clicked, this, Dialog::on_ButtonXML_clicked);
    //...
    }
    Si c'est bien le cas, je pense que le fichier a bien été crée quelque part. Normalement il est placé dans le dossier de compilation, par exemple "MonProjet-Desktop Qt 5.10.0 MinGW 32bit2-Debug"

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 47
    Points : 18
    Points
    18
    Par défaut
    Non je crois pas.
    J'ai juste fais clique droit sur le PushButton depuis l'interface graphique et "aller au slot" pour ajouter un header et cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dialog::Dialog(QWidget *parent)
    {
    }
    Ceci est déjà défini, du coup j'en déclare une nouvelle ?

  10. #10
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Points : 421
    Points
    421
    Par défaut
    Citation Envoyé par DynamX Voir le message
    Non je crois pas.
    J'ai juste fais clique droit sur le PushButton depuis l'interface graphique et "aller au slot" pour ajouter un header et cpp
    Ok, je ne connais pas cette fonctionnalité. Mais comme je l'ai dit le signal du bouton doit être connecté à la fonction (slot) dans laquelle le traitement s'effectue.
    Si ce n'est pas le cas il faut donc ajouter cette "connexion".

    Citation Envoyé par DynamX Voir le message
    Up

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dialog::Dialog(QWidget *parent)
    {
    }
    Ceci est déjà défini, du coup j'en déclare une nouvelle ?
    Non, c'est le constructeur, il n'est pas nécessaire de le redéfinir dans ce cas. Par contre il faut appeler le constructeur de la classe dont on hérite, j'imagine que dans ce cas il s'agit de QDialog, en lui passant le paramêtre "parent". Sinon la classe mère (QDialog) ne risque de ne pas être initialisée correctement. C'est la base de l'héritage C++.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dialog::Dialog(QWidget *parent) : QDialog(parent)
    {
    }

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 47
    Points : 18
    Points
    18
    Par défaut
    Oui j'ai bien compris pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dialog::Dialog(QWidget *parent) : QDialog(parent)
    {
    }
    C'est ce qui y a dedans, ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(ui->boutonExport, &QPushButton::clicked, this, Dialog::on_ButtonXML_clicked);
    Ca me mets un message d'erreur :
    erreur : invalid use of non-static member function
    connect(ui->ButtonXML, &QPushButton::clicked, this, Dialog::on_ButtonXML_clicked);

    Nom : oui.png
Affichages : 446
Taille : 110,0 Ko


    Voilà, j'ai juste rajouter cette ligne, ceci étant déjà créé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dialog::Dialog(QWidget *parent) : QDialog(parent)
    {

  12. #12
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Points : 421
    Points
    421
    Par défaut
    Il manque un & devant Dialog dans la fonction connect

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 47
    Points : 18
    Points
    18
    Par défaut
    Effectivement merci l'erreur n'y ai plus, je n'avais pas fais gaffe.

    Certes la fenêtre se lance mais rien ne se passe en appuyant sur le PushButton "Bouton XML".
    Donc je sais pas ce que j'ai oublié mais j'ai oublié quelques choses.

    Enfin j'ai mis que ce bout de programme dans la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Dialog::on_ButtonXML_clicked()
    Nom : prgm.png
Affichages : 469
Taille : 190,6 Ko


    Je penses qu'il faut mettre autres choses, les 2 que vous m'avez envoyés il y a quelques jours ?!

  14. #14
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Points : 421
    Points
    421
    Par défaut
    Oui c'est normal.
    D'ailleurs une erreur est indiquée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QObject::connect : invalid null parameter
    Il faut placer l'appel de connect(...) après l'appel de ui->setupUi(this) sinon le bouton n'existe pas encore lors de l'appel de connect.
    En gros, je recommande vivement de toujours laisser la ligne ui->setupUi(this) toujours en première position dans le constructeur.

    Cela devrait fonctionner comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ui->setupUi(this);
    connect(ui->boutonXML, &QPushButton::clicked, this, &Dialog::on_ButtonXML_clicked);

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 47
    Points : 18
    Points
    18
    Par défaut
    Exact, l'erreur dans "sortie application" n'apparaît plus mais malgré tout ceci, cela ne marche toujours pas

    Pièce jointe 363412

    J'ai ce programme dans la méthode ButtonXML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    void Dialog::on_ButtonXML_clicked()
    {
        QFile output("SUPREM.xml");
            if(output.open(QFile::WriteOnly)){ //Ouverture du fichier uniquement pour l'écriture
                QXmlStreamWriter stream(&output);
                stream.setAutoFormatting(true);
                stream.writeStartDocument(); //Début du document
     
                //SUPREM
                stream.writeStartElement("SUPREM"); //Ouverture du fichier SUPREM, le fichier XML
                stream.writeAttribute("xsi:noNamespaceSchemaLocation", "file:///XML/SUPREM.xsd");
                //(noNamespaceSchemaLocation -> schéma utilisé pour la validation doit être référencé dans le document d'instance XML)
                //Valeurs
                stream.writeStartElement("Valeurs"); //Ouverture du contenu contenant les valeurs
                stream.writeTextElement("RF", QString::number(qrand() % 256)); //Ecriture d'une valeur aléatoire (qrand()) dans RF
                stream.writeTextElement("MPX", QString::number(qrand() % 256)); //idem pour MPX
                stream.writeTextElement("Pilot", QString::number(qrand() % 256)); //idem pour Pilot
                stream.writeTextElement("RDS", QString::number(qrand() % 256)); //idem pour RDS
                stream.writeTextElement("AG", QString::number(qrand() % 256)); //idem pour AG
                stream.writeTextElement("AD", QString::number(qrand() % 256)); //idem pour AD
                stream.writeTextElement("Tension", QString::number(qrand() % 256)); //idem pour la Tension
                stream.writeTextElement("Frequence", QString::number(qrand() % 65536)); //idem pour la Frequence
                stream.writeEndElement(); // Fin de l'element Valeurs
                stream.writeEndElement(); // Fin de l'element SUPREM
     
                stream.writeEndDocument(); //Fin du document
            }
            output.flush();
            output.close();
    }

  16. #16
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Points : 421
    Points
    421
    Par défaut
    Dans ce cas il reste 2 solutions afin de vérifier que la fonction est bien appelée lors d'un clique sur le bouton

    1. Lancer le programme en mode "Debug", placer un breakpoint (F9 sur la ligne voulue) dans la fonction on_ButtonXML_clicked.
    Il sera ensuite possible de faire du "pas à pas" (F10) afin de vérifier si le fichier est bien créer au niveau du code.

    2. Placer un petit message de debug dans la fonction on_ButtonXML_clicked
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qDebug() << "on_ButtonXML_clicked Ok!";
    Il faut aussi ajouter #include <QDebug> afin que qDebug soit reconnu
    Ce message apparaitra ensuite dans la fenêtre "Sortie de l'application" de Qt Creator

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    void Dialog::on_ButtonXML_clicked()
    {
        qDebug() << "on_ButtonXML_clicked()";
        QFile output("SUPREM.xml");
        if(output.open(QFile::WriteOnly)){ //Ouverture du fichier uniquement pour l'écriture
            qDebug() << "Ouverture fichier OK";
            QXmlStreamWriter stream(&output);
            stream.setAutoFormatting(true);
            stream.writeStartDocument(); //Début du document
     
            //SUPREM
            stream.writeStartElement("SUPREM"); //Ouverture du fichier SUPREM, le fichier XML
            stream.writeAttribute("xsi:noNamespaceSchemaLocation", "file:///XML/SUPREM.xsd");
            //(noNamespaceSchemaLocation -> schéma utilisé pour la validation doit être référencé dans le document d'instance XML)
            //Valeurs
            stream.writeStartElement("Valeurs"); //Ouverture du contenu contenant les valeurs
            stream.writeTextElement("RF", QString::number(qrand() % 256)); //Ecriture d'une valeur aléatoire (qrand()) dans RF
            stream.writeTextElement("MPX", QString::number(qrand() % 256)); //idem pour MPX
            stream.writeTextElement("Pilot", QString::number(qrand() % 256)); //idem pour Pilot
            stream.writeTextElement("RDS", QString::number(qrand() % 256)); //idem pour RDS
            stream.writeTextElement("AG", QString::number(qrand() % 256)); //idem pour AG
            stream.writeTextElement("AD", QString::number(qrand() % 256)); //idem pour AD
            stream.writeTextElement("Tension", QString::number(qrand() % 256)); //idem pour la Tension
            stream.writeTextElement("Frequence", QString::number(qrand() % 65536)); //idem pour la Frequence
            stream.writeEndElement(); // Fin de l'element Valeurs
            stream.writeEndElement(); // Fin de l'element SUPREM
     
            stream.writeEndDocument(); //Fin du document
        } else qDebug() << "Erreur ouverture fichier: " << output.errorString();
        output.flush();
        output.close();
    }

  17. #17
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 47
    Points : 18
    Points
    18
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <QDebug>
    Dialog::Dialog(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::Dialog)
    {
        ui->setupUi(this);
        connect(ui->ButtonXML, &QPushButton::clicked, this, &Dialog::on_ButtonXML_clicked);
        qDebug() << "on_ButtonXML_clicked Ok!";
        temps();
    }
    On obtient ceci :
    Nom : app.png
Affichages : 382
Taille : 8,1 Ko

    Puis en lancant le programme en mode debug :
    Nom : qDebug.png
Affichages : 420
Taille : 123,8 Ko

  18. #18
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Points : 421
    Points
    421
    Par défaut
    Et qu'est ce qui se passe en plaçant des messages de debug dans la fonction on_ButtonXML_clicked() ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    void Dialog::on_ButtonXML_clicked()
    {
        qDebug() << "on_ButtonXML_clicked()";
        QFile output("SUPREM.xml");
        if(output.open(QFile::WriteOnly)){ //Ouverture du fichier uniquement pour l'écriture
            qDebug() << "Ouverture fichier OK";
            QXmlStreamWriter stream(&output);
            stream.setAutoFormatting(true);
            stream.writeStartDocument(); //Début du document
     
            //SUPREM
            stream.writeStartElement("SUPREM"); //Ouverture du fichier SUPREM, le fichier XML
            stream.writeAttribute("xsi:noNamespaceSchemaLocation", "file:///XML/SUPREM.xsd");
            //(noNamespaceSchemaLocation -> schéma utilisé pour la validation doit être référencé dans le document d'instance XML)
            //Valeurs
            stream.writeStartElement("Valeurs"); //Ouverture du contenu contenant les valeurs
            stream.writeTextElement("RF", QString::number(qrand() % 256)); //Ecriture d'une valeur aléatoire (qrand()) dans RF
            stream.writeTextElement("MPX", QString::number(qrand() % 256)); //idem pour MPX
            stream.writeTextElement("Pilot", QString::number(qrand() % 256)); //idem pour Pilot
            stream.writeTextElement("RDS", QString::number(qrand() % 256)); //idem pour RDS
            stream.writeTextElement("AG", QString::number(qrand() % 256)); //idem pour AG
            stream.writeTextElement("AD", QString::number(qrand() % 256)); //idem pour AD
            stream.writeTextElement("Tension", QString::number(qrand() % 256)); //idem pour la Tension
            stream.writeTextElement("Frequence", QString::number(qrand() % 65536)); //idem pour la Frequence
            stream.writeEndElement(); // Fin de l'element Valeurs
            stream.writeEndElement(); // Fin de l'element SUPREM
     
            stream.writeEndDocument(); //Fin du document
        } else qDebug() << "Erreur ouverture fichier: " << output.errorString();
        output.flush();
        output.close();
    }

  19. #19
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 47
    Points : 18
    Points
    18
    Par défaut
    Avec le programme que vous m'avez envoyé précédemment voici ce qui se passe :
    Nom : xd.png
Affichages : 391
Taille : 26,6 Ko

    Le fichier XML n'apparaît toujours pas,

  20. #20
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 47
    Points : 18
    Points
    18
    Par défaut
    Voici le programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    void Dialog::on_ButtonXML_clicked()
    {
     
        qDebug() << "on_ButtonXML_clicked()";
            QFile output("ValeursPhysique.xml");
            if(output.open(QFile::WriteOnly)){ //Ouverture du fichier uniquement pour l'écriture
                qDebug() << "Ouverture fichier OK";
                QXmlStreamWriter stream(&output);
                stream.setAutoFormatting(true);
                stream.writeStartDocument(); //Début du document
     
                //SUPREM
                stream.writeStartElement("ValeursPhysique"); //Ouverture du fichier SUPREM, le fichier XML
                stream.writeAttribute("xsi:noNamespaceSchemaLocation", "/home/etudiant/Documents/Projet SUPREM/PARTIE PERSO/SUPREM.xsd");
               //(noNamespaceSchemaLocation -> schéma utilisé pour la validation doit être référencé dans le document d'instance XML)
               //Valeurs
                       stream.writeStartElement("Valeurs"); //Ouverture du contenu contenant les valeurs
                       stream.writeTextElement("RF", QString::number(qrand() % 256)); //Ecriture d'une valeur aléatoire (qrand()) dans RF
                       stream.writeTextElement("MPX", QString::number(qrand() % 256)); //idem pour MPX
                       stream.writeTextElement("Pilot", QString::number(qrand() % 256)); //idem pour Pilot
                       stream.writeTextElement("RDS", QString::number(qrand() % 256)); //idem pour RDS
                       stream.writeTextElement("AG", QString::number(qrand() % 256)); //idem pour AG
                       stream.writeTextElement("AD", QString::number(qrand() % 256)); //idem pour AD
                       stream.writeTextElement("Tension", QString::number(qrand() % 256)); //idem pour la Tension
                       stream.writeTextElement("Frequence", QString::number(qrand() % 65536)); //idem pour la Frequence
                       stream.writeEndElement(); // Fin de l'element Valeurs
                       stream.writeEndElement(); // Fin de l'element SUPREM
     
                       stream.writeEndDocument(); //Fin du document
                   } else qDebug() << "Erreur ouverture fichier: " << output.errorString();
                   output.flush();
                   output.close();
    }
    J'ai nommé le fichier comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QFile output("ValeursPhysique.xml");
    Voici le chemin de création :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stream.writeAttribute("xsi:noNamespaceSchemaLocation", "/home/etudiant/Documents/Projet SUPREM/PARTIE PERSO/SUPREM.xsd");
    Le fichier s'est créé :
    Nom : xml.png
Affichages : 421
Taille : 31,7 Ko

    Mais en l'ouvrant ce message d'erreur apparaît :
    Nom : xmlgoogle.png
Affichages : 412
Taille : 31,4 Ko

    Je sais pas d'ou viens l'erreur mais je penses que c'est un problème de chemin ou quelques choses qui s'en rapproche

Discussions similaires

  1. InstallShield Pro 2010 : créer un DSN et un fichier XML
    Par devuranie dans le forum Autres Solutions d'entreprise
    Réponses: 0
    Dernier message: 01/02/2011, 15h30
  2. Créer une table oracle via fichier XML
    Par karync dans le forum Pentaho
    Réponses: 2
    Dernier message: 01/10/2010, 11h32
  3. [JDOM] création dynamique d'un formulaire correspondant à un fichier XML
    Par sissi25 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 28/05/2008, 16h03
  4. Formulaire rempli par fichier XML
    Par abronsius dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 22/04/2007, 20h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo