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

Qt Discussion :

Interface de Calcul proche de Matlab


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Par défaut Interface de Calcul proche de Matlab
    Bonjour,

    Je suis débutant sur QT , j'ai QT SDK 2010.02.1 installé récemment. Je souhaite créer un interface de calcul proche de Matlab, style quand on écrit 1+2 puis en tapant sur entrée, on obtient 3 en bas.

    Pour l'instant j'ai pu créer un champ de saisie avec QLineEdit. Pour tester, j'ai demandé à ce que le bouton "entrée" fait fermer la fenêtre, et ça marche avec la commande suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(LineEdit, SIGNAL(returnPressed()), qApp, SLOT(quit()));
    Maintenant je me demande comment je peux le rendre intelligent en détectant les caractères et les chiffres, genre détecter dans "1+2" le "1", puis l'opérateur "+" puis le deuxième chiffre "2".

    Quelqu'un aurait une idée ? Merci beaucoup...

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour

    Ca ne va pas être très compliqué... il suffit d'utiliser QtScript : http://qt.developpez.com/doc/latest/scripting.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QScriptEngine engine;
    qDebug() << "the magic number is:" << engine.evaluate("1 + 2").toNumber();

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Par défaut
    voici ce que j'ai déjà:

    calculpad.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
    #include <QtGui>
    #include <QLineEdit>
    #include <QString>
     
    #include "calculpad.h"
     
    Window::Window()
    {
        QGroupBox *Groupe = new QGroupBox(tr("Calcul"));
     
        LineEdit = new QLineEdit;
        LineEdit->setFocus();
     
        connect(LineEdit, SIGNAL(editingFinished()), qApp, SLOT(quit()));
     
        QGridLayout *Layout = new QGridLayout;
        Layout->addWidget(LineEdit, 1, 0, 1, 2);
        QGridLayout *layout = new QGridLayout;
        layout->addWidget(Groupe, 1, 0, 2, 4);
     
        Groupe->setLayout(Layout);
        setLayout(layout);
     
        setWindowTitle(tr("CalculPad"));
    }
    calculpad.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
    #ifndef CALCULPAD_H 
    #define CALCULPAD_H
     
    #include <QWidget>
     
    class QLineEdit;
     
    class Window: public QWidget
    {
        Q_OBJECT
     
    public:
        Window();
     
    private:
        QLineEdit *LineEdit;
        QString str;
    };
     
    #endif
    main.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <QApplication>
     
    #include "calculpad.h"
     
    int main(int argc, char *argv[])
    {
        QApplication app (argc, argv);
     
        Window Window;
        Window.show();
     
        return app.exec();
    }
    Ce que je voudrais faire d'abord, c'est de pouvoir afficher quelque chose en dessous en cliquant sur "entrée", genre un string 'Bravo'.

    Ensuite, en utilisant les propriétés de QString (sauf si quelqu'un a une meilleure idée) pour détecter les opérateurs (+, -, *, /) et de différencier les caractères avant et après les opérateurs...

    Quelqu'un pourrait m'aider ? Merci...

  4. #4
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Par défaut
    Citation Envoyé par kong.stan Voir le message
    Bonjour,

    Pour l'instant j'ai pu créer un champ de saisie avec QLineEdit. Pour tester, j'ai demandé à ce que le bouton "entrée" fait fermer la fenêtre, et ça marche avec la commande suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(LineEdit, SIGNAL(returnPressed()), qApp, SLOT(quit()));
    Bonjour kong.stan,

    Au lieu de connecter votre contrôle Pressed à la fermeture de l'application, il vous faut connecter ce "SIGNAL" à un "SLOT" de votre classe Window.

    Dans cette méthode, vous pourrez récupérer le contenu de la LineEdit et le stocker dans un QString pour le traiter. Le résultat pourra être affiché par exemple dans un QLabel.

    Il vous faut donc regarder du coté des SIGNAUX et SLOTS
    ainsi que la classe QString.

    Si les opérations de calculs sont simple, la proposition de gbdivers pourrait vous simplifier grandement l'interprétation de la ligne de calcul.

    Bon courage.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Par défaut
    Citation Envoyé par JeromeBcx Voir le message
    Bonjour kong.stan,

    Au lieu de connecter votre contrôle Pressed à la fermeture de l'application, il vous faut connecter ce "SIGNAL" à un "SLOT" de votre classe Window.

    Dans cette méthode, vous pourrez récupérer le contenu de la LineEdit et le stocker dans un QString pour le traiter. Le résultat pourra être affiché par exemple dans un QLabel.

    Il vous faut donc regarder du coté des SIGNAUX et SLOTS
    ainsi que la classe QString.
    Oui mais j'ai du mal à utiliser les données de QLineEdit dans QString. As-tu une idée comment faire ? Par exemple, si je tape "1+1" puis "entrée", pour l'instant, ce qu'il va faire c'est de fermer la fenêtre. Normal, car j'ai mis quit() à slot. Comment donc traiter les entrées de QLineEdit avec QString ?



    Une deuxième question, qui n'a rien à voir avec ça. J'ai essayé de faire une barre de menu, avec le classique "fichier", qui propose, dans un premier temps, un menu avec "Quitter". En cliquant dessus, on ferme la fenêtre.

    ça n'a pas l'air d'être compliqué jusque là, mais ce que j'ai fait, un simple clique sur "fichier" fermerait la fenêtre. pas de menu avec "quitter" du tout.

    voici mes codes:

    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
    Window::Window()
    {
     	   createMenu();    
     
        //...
     
     	   mainLayout->setMenuBar(menu);
     
    }
     
    void Window::createMenu()
    {
    	menu = new QMenuBar;
    	fileMenu = new QMenu(tr("File"), this);
    	exitAction = new QAction(tr("&Quit"), this);
    	fileMenu->addAction(exitAction);
    	menu->addMenu(fileMenu);
     
    	connect(exitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
    }
    et dans l'entête:

    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
    #include <QMenuBar>
    #include <QMenu>
     
    class QLineEdit;
     
    class Window: public QWidget
    {
       Q_OBJECT
     
    public:
          Window();
     
       private:
          void createMenu();
     
          QMenuBar *menu;
          QMenu *fileMenu;
          QAction *exitAction;
    };
     
    #endif
    merci pour l'aide...

  6. #6
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Par défaut
    Bonjour kong.stan,

    Euh, comment dire... ça s'éparpille...
    Chaque chose en son temps s'il vous plait.

    Je ne saurais trop vous renvoyer vers l'aide de Qt et en particulier l'application QtDemo qui vous fournit des petits exemples sur les composants de Qt.

    Vous trouverez de quoi faire une petite calculatrice (sommes) et comment créer des menus, entre autre.

    N'hésitez pas à vous référer aux tutoriels de dvp.com http://qt.developpez.com/tutoriels/

    et un petit google avec les mots clés : "introduction à Qt"


    ...Normal, car j'ai mis quit() à slot. Comment donc traiter les entrées de QLineEdit avec QString ?
    Avez vous lu attentivement mon précédent post ????
    Pour récupérer dans le slot associé à QLineEdit (le nouveau, pas quit() évidement), vous pouvez utiliser la méthode text() de QLineEdit qui vous renvoie sont contenu sous forme de QString.

    Mais n'hésitez à faire plusieurs tutos avant de vous lancez tête baissée... sinon vous irez droit dans le mur.

    Bon tuto et lecture !

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Par défaut
    Citation Envoyé par JeromeBcx Voir le message
    Pour récupérer dans le slot associé à QLineEdit (le nouveau, pas quit() évidement), vous pouvez utiliser la méthode text() de QLineEdit qui vous renvoie sont contenu sous forme de QString.
    Voici ce que j'ai fait (en lisant les tuto et QT Assistant):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    QLineEdit *LineEdit = new QLineEdit;
    LineEdit->setFocus();
     
    QString formulaire = LineEdit->text();
    QLabel *label = new QLabel(formulaire);
     
    connect(LineEdit, SIGNAL(returnPressed()), label, SLOT(setText(const QString &)));
    En tapant sur "entrée", ça a rien fait, et pourtant, en lisant le code, ça devait renvoyer le texte que j'ai tapé dans QLabel... je me trompe ?

  8. #8
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Par défaut
    Citation Envoyé par kong.stan Voir le message
    Voici ce que j'ai fait (en lisant les tuto et QT Assistant):
    Désolé mais je pense que vous avez lu trop vite...
    Prenez votre temps, relisez mon post précédemment, en particulier la première page google...

    Le code que vous avez écrit ne marchera pas, setText ne reçoit jamais d'information, il ne sait donc pas remplir le QLabel...

Discussions similaires

  1. Passage de variable d'une interface a une autre guide matlab
    Par nadou114 dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 13/05/2010, 23h33
  2. calcul du PSNR Matlab
    Par eloise_v dans le forum MATLAB
    Réponses: 8
    Dernier message: 10/05/2010, 18h26
  3. Calcul d'intégrale matlab
    Par hugo_n6k dans le forum MATLAB
    Réponses: 2
    Dernier message: 12/01/2010, 08h59
  4. Interfacer STEP 7 - Langage évolué/Matlab
    Par medchok dans le forum Automation
    Réponses: 17
    Dernier message: 16/04/2009, 10h53
  5. Calcul matriciel avec Matlab
    Par comoliv02 dans le forum MATLAB
    Réponses: 1
    Dernier message: 12/03/2007, 12h14

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