Partage
  • Partager sur Facebook
  • Partager sur Twitter

QT plot un fichier CSV

Qcustomplot or Qchart

Sujet résolu
    16 décembre 2019 à 17:33:25

    Bonjour,

    Débutant sur QT et avec de légère notion en c++, voulant progresser je cherche des réponses !

    Mon problème est le suivant j'ai un fichier CSV comprenant 4 colonnes et 3 lignes.

    Jusque la j'arrive à le lire et à l'afficher sur l'interface.ui mais je souhaite réaliser 3 graphiques :

    - première colonne en fonction de la quatrième

    - deuxième colonne en fonction de la quatrième

    - troisième colonne en fonction de la quatrième

    j'ai regardé tranquillement des exemples et j'ai trouvé plusieurs solutions dont :

    - Qcustomplot

    - Qchart

    mais je n'arrive pas à gérer l'utilisation de ces méthodes.

    Je viens donc vers vous pour m'aiguiller dans ma démarche.

    Merci d'avance !

    ci-dessous ce que j'ai déjà pu réaliser à la système D.

    le .cpp

    ///////////////////////////////////////////////.CPP///////////////////////////////////////////////////////////
    #include "interface.h"
    #include "ui_interface.h"
    #include <QFileDialog>
    #include <stdio.h>
    #include <iostream>
    #include <QFile>
    #include <QStringList>
    #include <QDebug>
    #include <QTextStream>
    #include <QFileInfo>
    
    interface::interface(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::interface)
    {
        ui->setupUi(this);
    }
    
    interface::~interface()
    {
        delete ui;
    }
    
    
    void interface::on_pushButton_clicked()
    {
            //obtenir un chemin absolu ?
           //QFileInfo fi("c:/temp/foo"); => fi.absoluteFilePath() => "C:/temp/foo"
    
            QString myOpenFile = QFileDialog::getOpenFileName(this, tr("Open CSV"),tr("C:\\"), tr("cool files (*.csv)"));
            // On vérifie que l'utilisateur a bien sélectionné un fichier
            // Si la chaîne est vide, c'est que l'utilisateur a cliqué sur annuler
            if(myOpenFile.isEmpty())// myopenfile = chemin absolu
            {
                return;
            }
            // Un fichier a été sélectionné par l'utilisateur
            else
            {
                std::cout << "Youhou cela marche j'ai mon chemin absolu" << std::endl; // printf
            }
    
           ui->lineEdit->setText(myOpenFile);
    
           std::cout << "line edit ok" << std::endl;
           qDebug() <<  myOpenFile;
    
    
           QStandardItemModel *model = new QStandardItemModel;
    
           QFile file(myOpenFile);
    
           if (file.open(QIODevice::ReadOnly))
           {
    
               int lineindex = 0;                     // première ligne
               QTextStream in(&file);                 // read to text stream
    
               while (!in.atEnd())
               {
    
                   // pour look line/line
                   QString fileLine = in.readLine();
    
                   // regarde le séparateur (peut être changé.
                   QStringList lineToken = fileLine.split(";", QString::SkipEmptyParts);
    
                   // intègre les ligne et col
                   for (int j = 0; j < lineToken.size(); j++)
                   {
                       QString value = lineToken.at(j);
                       QStandardItem *item = new QStandardItem(value);
                       model->setItem(lineindex, j, item);
                       qDebug() << value; // afficher les valeurs du fichier csv  sur la console.
    
    
    
                       //passer des qstring en int ou float
                       QString valeurnum = lineToken.at(j);
                     
    
                       bool ok = false;
    
                       int nombre = valeurnum.toInt(&ok, 10); // 10 => int base pour avoir des nombres et non pas des caractères pour faire un graph ?
    
                       if( ok ){
                           printf("\n %d", nombre);} // printf c'est en c mais j'ai remarqué que cela fonctionné aussi ici
                       else{
                           printf("Erreur");}
    
    
                   }
    
                   lineindex++;
                }
    
           file.close();
           std::cout << "\n \n fichier close" << std::endl;
    
           }
    
           ui->tableView->setModel(model);
    
    }
    
    
    
    


    le .h

    /////////////////////////////////////////////////H////////////////////////////////////////////////////////////
    
    #ifndef INTERFACE_H
    #define INTERFACE_H
    
    #include <QMainWindow>
    #include <QStandardItemModel>
    
    QT_BEGIN_NAMESPACE
    namespace Ui { class interface; }
    QT_END_NAMESPACE
    
    class interface : public QMainWindow
    {
        Q_OBJECT
    
    public:
        interface(QWidget *parent = nullptr);
        ~interface();
    
    private slots:
        void on_pushButton_clicked();
    
    private:
        Ui::interface *ui;
        QStandardItemModel *csvModel;
    };
    #endif // INTERFACE_H

    le main (je n'y ai pas touché promis)

    #include "interface.h"
    
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        interface w;
        w.show();
        return a.exec();
    }
    


    et une image de mon exe

    Mon csv est bien de la forme suivante :

    1;2;3;0

    4;5;6;1

    7;8;9;2

    Donc ça au moins c'est correct mais pour tracer les graph je patauge !


    -
    Edité par PortalierCédric 16 décembre 2019 à 17:34:44

    • Partager sur Facebook
    • Partager sur Twitter
      16 janvier 2020 à 11:50:39

      Bonjour, 

      Perso, sa me parait super compliqué, je suis débutant comme toi et je dois faire un graphique depuis un fichier csv, pourrais tu m'aider d'une quelconque façon ?

      Cordialement

      • Partager sur Facebook
      • Partager sur Twitter

      QT plot un fichier CSV

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown