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 :

Remplissage d'une combobox par un fichier CSV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Novembre 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2017
    Messages : 13
    Par défaut Remplissage d'une combobox par un fichier CSV
    Bonjour ,
    suite à plusieurs recherches et d'effort , je me suis retrouvée perdue et j'ai pas pu avancer , pouvez vous m'aider svp !
    je voudrai écrire un programme qui va me permis de créer une interface sur Qt .en fait j'ai construit un fichier csv qui se constitue de toutes les donnes ( produit, prix d'achat,prix de vente ), puis j'ai écris un programme sur Qt qui lit ce fichier et ça marche bien jusqu’à la .
    l'interface doit contenir :
    un comBobox qui contient tous les produits qui sont dans le fichier csv (coca,café,tisane,eau),et à moi de sélectionner le produit que je veux
    un spinbox 1 qui affiche le prix d'achat de chaque produit sélectionné dans la combobox.
    un spinbox 2 qui affiche le prix de vente de chaque produit sélectionné dans la combobox.
    un spinbox 3 qui affiche le stock de chaque produit sélectionné dans la combobox.
    Deux boutons (sauver , quitter),avec leur slot.
    je veux prie de bien m'aider , en fait j'ai écrit un code mais il n'est pas complet j'arrive pas à le terminer :

    Produit.h:
    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
    #include <QMainWindow>
    #include<QFileDialog>
    #include<QVector>
    #include<QComboBox>
    #include<QSpinBox>
    class MainWindow : public QMainWindow
    {
    Q_OBJECT
    public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
    Produit( const QString& nom="", double pvente=0, double pachat=0, int stock=-9999 , const QString& ustock="piece") ;
    public slots:
     
    void slotComboBox_currentIndexChanged(int index);
    private:
     
    QString nom_ ;
    double pvente_, pachat_ ; // unités non gérées
    int stock_ ;
    QVector<Produit> r;
    int find( const QString& nomP) ; // retourne index du produit, ou -1
    QComboBox *C1;
    QSpinBox *S1;
    QSpinBox*S2;
    QSpinBox*S3;
     
    } ;
    Produit.cpp:
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    #include "mainwindow.h"
    #include<QBoxLayout>
    #include<QSpinBox>
    #include<QApplication>
    #include<QFrame>
    #include<QFormLayout>
    #include<QComboBox>
    #include<QFile>
    #include<QString>
    #include<QPushButton>
    #include<QTextLine>
    #include<QLabel>
    MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
    {
    QFrame *frame =new QFrame(this);
    setCentralWidget(frame);
    QBoxLayout*lay=new QBoxLayout(QBoxLayout::TopToBottom,frame);
    QLabel *label = new QLabel("Produit ",this);
    QLabel *label1 = new QLabel("Prix d'achat ",this);
    QLabel *label2 = new QLabel("Prix de vente ",this);
    QLabel *label3 = new QLabel("Stock ",this);
    lay->addWidget(label);
    lay->addWidget(C1);
    lay->addWidget(label1);
    lay->addWidget(S1);
    lay->addWidget(label2);
    lay->addWidget(S2);
    lay->addWidget(label3);
    lay->addWidget(S3);
    lay->addStretch();
    QHBoxLayout*lay1=new QHBoxLayout(this);
    QPushButton*b1=new QPushButton("Sauver");
    lay1->addWidget(b1);
    QPushButton*b2=new QPushButton("Quitter");
    connect(b1,SIGNAL(clicked(),qApp,SLOT(quit()));
    lay1->addWidget(b2);
    lay->addLayout(lay1);
    }
     
    int MainWindow::find( const QString& nomP)
    {
    for( int k = 0 ; k < r.size() ; ++k)
    if( nomP == r[k].nom() ) 
    return k ;
    return -1 ;
    }
    MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
    {
    //ouvrir un fichier ayant l'extension .csv
    r = lireProduits(QFileDialog::getOpenFileName(this,"Open File", ".",".csv"));
    for(const auto & Produit :r) //je récupère le nom du produit et l'insère dans la comboBox
    comboBox_Produit->addItem(Produit.nom());
    ComboBox *C1->setcurrentindex(0,r);
    ????????????????????????????// la ou je beugue
     
    {
    if(it!=r.end())
    {
    spinBox_prixAchat->setValue(it->pachat());
    spinBox_prixVente->setValue(it->pvente());
    if(it->isValid())
    {
    spinBox_stocks->setEnabled(true);
    spinBox_stocks->setValue(it->stock());
    }
    else
    spinBox_stocks->setEnabled(false);
    }
     
     
     
    {
    qApp->quit();
    }
    Merci d avance

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

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Par défaut
    Bonjour,
    Dans votre code
    - Le constructeur de "MainWindow" est défini 2 fois dans MainWindow.cpp (ou "Produit.cpp")
    - On retrouve la déclaration du constructeur de Produit dans la classe MainWindow. Produit devrait normalement être défini dans un autre fichier, mais on ne vois pas de "#include "produit.h" dans le code. Définir le constructeur de cette façon ne suffit pas à créer une classe.

    Voici une version corrigée qui devrait mieux fonctionner.

    produit.h
    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
    class Produit{
    public:
        Produit( const QString& nom="", double pvente=0, double pachat=0, int stock=-9999 , const QString& ustock="piece")
            :  m_nom(nom), m_pvente(pvente), m_pachat(pachat), m_stock(stock)
        {}
     
        QString nom(){
            return m_nom;
        }
        void setNom(const QString &nom){
            m_nom = nom;
        }
     
        double pvente(){
            return m_pvente;
        }
        void setPvente(const double &pvente){
            m_pvente = pvente;
        }
     
        double pachat(){
            return m_pachat;
        }
        void setPachat(const double &pachat) {
            m_pachat = pachat;
        }
     
        int stock() {
            return m_stock;
        }
        void setStock(const int &stock) {
            m_stock = stock;
        }
     
        QString ustock() {
            return ustock;
        }
        void setUstock(const QString &ustock) {
            ustock = ustock;
        }
     
        bool isValid(){
            return !m_nom.isEmpty() && (m_stock != -9999);
        }
     
    private:
        QString m_nom; 
        double m_pvente;
        double m_pachat;
        int m_stock;
        QString ustock;
    };
    mainwindow.h
    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
     
    #include "produit.h"
    #include <QMainWindow>
    #include<QFileDialog>
    #include<QVector>
    #include<QComboBox>
    #include<QSpinBox>
    class MainWindow : public QMainWindow
    {
    Q_OBJECT
    public:
        MainWindow(QWidget *parent = 0);
        ~MainWindow();
     
        //Pourquoi le constructeur de Produit ici ?? 
    //    Produit( const QString& nom="", double pvente=0, double pachat=0, int stock=-9999 , const QString& ustock="piece") ;
    public slots:
     
        void slotComboBox_currentIndexChanged(int index);
    private:
        void load();
     
        QString nom_;
        double pvente_, pachat_ ; // unités non gérées
        int stock_;
        QVector<Produit> r;
        int find( const QString& nomP) ; // retourne index du produit, ou -1
        QComboBox *comboBox_Produit;
        QSpinBox *spinBox_prixVente;
        QSpinBox *spinBox_prixAchat;
        QSpinBox *spinBox_stocks;
     
    } ;
    mainwindow.cpp
    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
    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
     
    #include "mainwindow.h"
    #include<QBoxLayout>
    #include<QSpinBox>
    #include<QApplication>
    #include<QFrame>
    #include<QFormLayout>
    #include<QComboBox>
    #include<QFile>
    #include<QString>
    #include<QPushButton>
    #include<QTextLine>
    #include<QLabel>
    MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
    {
        QFrame *frame =new QFrame;
        setCentralWidget(frame);
        QBoxLayout*lay=new QBoxLayout(QBoxLayout::TopToBottom,frame);
        QLabel *label = new QLabel("Produit ");
        QLabel *label1 = new QLabel("Prix d'achat ");
        QLabel *label2 = new QLabel("Prix de vente ");
        QLabel *label3 = new QLabel("Stock ");
     
        comboBox_Produit = new QComboBox;
        spinBox_prixVente = new QSpinBox;
        spinBox_prixAchat = new QSpinBox;
        spinBox_stocks = new QSpinBox;
     
        lay->addWidget(label);
        lay->addWidget(comboBox_Produit);
        lay->addWidget(label1);
        lay->addWidget(spinBox_prixAchat);
        lay->addWidget(label2);
        lay->addWidget(spinBox_prixVente);
        lay->addWidget(label3);
        lay->addWidget(spinBox_stocks);
        lay->addStretch();
        QHBoxLayout*lay1=new QHBoxLayout;
        QPushButton*b1=new QPushButton("Sauver");
        lay1->addWidget(b1);
        QPushButton*b2=new QPushButton("Quitter");
        connect(b1,SIGNAL(clicked(),qApp,SLOT(quit()));
        lay1->addWidget(b2);
        lay->addLayout(lay1);
     
         //Mise à jour du produit lorsque la séléction change
        connect(comboBox_Produit, &QComboBox::currentIndexChanged, this, &MainWindow::slotComboBox_currentIndexChanged);
        //Chargement des produits dans la combobox
        load();
    }
     
    int MainWindow::find( const QString& nomP)
    {
        for( int k = 0 ; k < r.size() ; ++k)
            if( nomP == r[k].nom() ) 
                return k ;
        return -1 ;
    }
     
    //Le constructeur est déjà défini au début de ce fichier, il 
    //n'est pas possible de le définir une seconde fois
    //MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
    void MainWindow::load() 
    {
        //ouvrir un fichier ayant l'extension .csv
        r = lireProduits(QFileDialog::getOpenFileName(this,"Open File", ".",".csv"));
        if(!r.isEmpty()){
            comboBox_Produit->clear();
            for(const auto & p :r) //je récupère le nom du produit et l'insère dans la comboBox
                comboBox_Produit->addItem(p.nom());
            //comboBox_Produit->addItem(Produit.nom()); 
            //ComboBox *C1->setcurrentindex(0,r);
            //???????????????????????????? la ou je beugue
            Produit p = r.first();        
            comboBox_Produit->setCurrentIndex(0);
     
        }
     
    }
     
    void MainWindow::slotComboBox_currentIndexChanged(int index)
    {
        Produit p = r.at(index);
        spinBox_prixAchat->setValue(p.pachat());
        spinBox_prixVente->setValue(p.pvente());
        spinBox_stocks->setEnabled(p.isValid());
        if(p.isValid())
            spinBox_stocks->setValue(p.stock());
    }

  3. #3
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Novembre 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2017
    Messages : 13
    Par défaut
    Merci beaucoup , plusieurs lignes ont été utiles ...par contre je cherche le slot pour connecter le bouton "sauver" ,parce que ça ne fonctionne pas !

    Merci de votre retour !

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Par défaut
    C'est pareil que la connexion de la combobox, sans argument:


    mainwindow.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class MainWindow : public QMainWindow
    {
    Q_OBJECT
    ...
    public slots: 
        void slotComboBox_currentIndexChanged(int index);
        void onBtSauver();
    ... 
    } ;
    mainwindow.cpp
    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
    MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
    {
    ...
        QPushButton*b1=new QPushButton("Sauver");
        connect(b1,SIGNAL(clicked()), this, SLOT(onBtSauver()));
        QPushButton*b2=new QPushButton("Quitter");
        connect(b2,SIGNAL(clicked()),qApp, SLOT(quit()));
    ...
    }
     
    void MainWindow::onBtSauver()
    {
        //Code à exécuter lorsque le bouton "Sauver" est cliqué
     
    }

  5. #5
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Novembre 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2017
    Messages : 13
    Par défaut
    je vous remercie infiniment pour votre réactivité et de votre aide , ça me motive plus ,étant une débutante dans cette voix , si on disait pas que c'est mon premier projet

    Maintenant je réfléchi à ajouter un bouton "ajouter" qui va ouvrir un autre widget qui me permettre d'ajouter un nouveau produit,on sait jamais un jour je voulais ajouter de nouvelles boissons (avec les mêmes caractéristiques (P-achat,P-vente,stock) ),mon idée est comme suite :
    j'ajoute un bouton ajouter qui va ouvrir un widget ou je pourrai mettre le nom du produit;p_achat,p_vente,stock.puis un bouton dessous sauver ,lorsque je fais sauver le nouveau produit s'ajoute automatique dans le fichier csv , et beh s'ajoute aussi dans le widget principal !

    Est ce que c'est faisable !!

    Je vous remercie d'avance

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Par défaut
    Oui bien sûre, j'aurais tendance à dire que tout est faisable avec Qt .

    Plutôt qu'un simple widget, une boîte de dialogue modale (QDialog) serait plus indiquée pour ce genre d'action.

    Il faut donc:
    - Créer une classe héritant de QDialog.
    - Définir l'interface graphique voulue.
    - Connecter le bouton "sauver" au slot "accepted()", et le bouton "Annuler" au slot "rejected()". accepted() et rejected() sont des slots fourni par la class QDialog.
    - Créer une fonction pour permettre de récupérer les valeurs entrée par l'utilisateur

    je n'ai pas le temps de faire un code exemple maintenant. Je le ferai si j'ai un peu de temps ce soir ou demain matin.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/06/2006, 17h36
  2. Réponses: 6
    Dernier message: 07/06/2006, 13h41
  3. resultat d'une requete dans un fichier csv
    Par PAYASS59 dans le forum Requêtes
    Réponses: 1
    Dernier message: 21/09/2005, 22h14
  4. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 15h46
  5. Réponses: 2
    Dernier message: 26/07/2004, 14h34

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