Partage
  • Partager sur Facebook
  • Partager sur Twitter

Question sur Qt et C++

Sujet résolu
    19 avril 2018 à 2:16:39

    Bonsoir,

    je suis le court de Qt depuis un bout de temps je suis rendu au TP ZNavigo mais avance cela il y avait un exercice de MiniCalculatrice. Je remarque donc que j'ai plusieurs questions et de chose je ne comprends j'ai donc décider de relire la cours mais encore quelque questions sont sans réponse.

    1. Lorsque que je crée un SINGAL et SLOT je dois commence par "QOBJECT::connect" mais parfois seulement connect suffit. Pourquoi ?

    2. Dans le TP de la MiniCalculatrice je dois donc changer le int du texte nommer "résultat" mais ou dois-je mettre cette ligne de code dans la fonction "calculerOperation" ou ailleurs ? Comment puis-je passe un int de l'addition en texte pour afficher le résultat ? Et aussi que dois-je retourner ?

    int MainWindow::calculerOperation()
    {
        int nombre;
        QString operateur = ui->operation->currentIndex();
        if(operateur == "+")
        {
            nombre = ui->nombre1->value() + ui->nombre2->value();
        }
    
        ui->resultat->text() = nombre;
    
        return nombre;
    }

    3. Une dernière mais des plus fameuse. Quand dois-je crée un QWidget en pointeur et pourquoi en pointeur ?

    Il doit avoir encore des tas de questions sans réponse mais se son celle qui me venait en tète pour l'instant. Merci de votre aide.

    -
    Edité par Jnitech 19 avril 2018 à 2:32:36

    • Partager sur Facebook
    • Partager sur Twitter
      19 avril 2018 à 9:03:11

      Salut,

      Pour la n-ième fois sur le forum, le cours de C++ de OC n'est pas bon, il est extrêmement déconseillé de le suivre

      Pour tes questions :

      1. connect possède plusieurs surcharges, beaucoup sont statiques, donc lorsque tu ne l'appelle pas depuis un QObject tu as besoin de le suffixer de l'espace de nom, cependant lorsque tu es dans un QObject ce n'est pas obligatoire, c'est implicite, tu appelles la fonction connect de l'objet dans lequel tu es, et en remontant l'arbre d'héritage tu tombes sur celui du QObject, si tu n'as pas surchargé avec la même signature plus bas dans l'arbre d'héritage

      2. Quel est le type de "resultat" ? un QLineEdit ?
      la méthode text() est ce qu'on appelle un accesseur (ou getter), il permet de lire la valeur du texte, pas de la modifier
      Pour la modifier, tu as besoin du mutateur (ou setter), "setText(QString)".
      Tu vas avoir besoin de convertir ton nombre en chaine de caractère, la méthode QString::number peut s'en charger

      3. C'est une spécificité de Qt, il y a un système parent-enfant entre les widgets qui permet de se décharger des problématiques de destruction. Par conséquent, il faut déléguer cette responsabilité et donc passer par un pointeur

      • Partager sur Facebook
      • Partager sur Twitter
      Dream on, Dream on, Dream until your dream comes true
        19 avril 2018 à 16:28:40

        Cela repond bien a mes questions merci encore. Mais pourquoi dite vous que le cours de C++ sur OC n’est pas bon ? Sinon ou dois-je apprendre le C++ autre que OC ?

        -
        Edité par Jnitech 20 avril 2018 à 1:48:22

        • Partager sur Facebook
        • Partager sur Twitter
          19 avril 2018 à 17:15:12

          Tu pourras trouver tout plein d'arguments en cherchant un peu dans le forum. Un membre avait récapitulé certains point sur son site.

          Globalement, il est trop vieux et donc est obsolète, puisqu'un nouveau standard (Cx11) a beaucoup changer la façon de programmer en C++ et les évolutions suivantes vont dans le même sens

          De plus il y a des erreurs de conception dans les exemples et les exercices

          Et enfin, il y a un soucis dans la structure du cours (les notions abordés et leurs ordres)

          gbdivers a écrit un cours avec une approche bien différente, il y a encore des points à développer, en cours de rédaction, mais il est déjà suffisamment complet pour lancer un débutant dans la programmation C++

          Sinon il faut se tourner vers des ressources anglophones, Ksass`Peuk a l'habitude de conseiller C++ primer de Lippman. Je connais pas alors je peux pas dire mais je lui fait plutôt confiance (et il est conseillé aux débutants directement par le comité C++ sur isocpp.org)

          Et il y a The C++ Programming Language de Stroustrup, père du C++, mais plutôt dans un second temps ... faut déjà avoir assimilé quelques notions pour bien en profiter

          Et ne pas hésité à abuser de cppreference

          PS : Pour ton soucis, j'ai pas précisé, mais la gestion parent-enfant n'est pas 100% automatique, tu dois tout de même indiquer à chaque instance quel est son parent en l'indiquant dans le champs approprié du constructeur ! Je te laisse te renseigner pour la suite

          -
          Edité par romantik 19 avril 2018 à 17:26:58

          • Partager sur Facebook
          • Partager sur Twitter
          Dream on, Dream on, Dream until your dream comes true
            20 avril 2018 à 1:47:56

            Merci de vos réponse. Du coup j'ai passer beaucoup heure a faire se cour mais qui me serviront a rien puisque C++ a changer ?  Devrais-je arrêter de suive se cour et en suive un autre ? Sinon c'était bien mon erreur "setText" j'ai aussi quelque changement dans le code pour convertir les nombre en textes. Mais je me demandais cette MiniCalculatrice ne peu que calculer les nombre entier et non les nombre a virgule. Pourquoi ? Dernière questions que dois-je retourner au "return" ?
            int MainWindow::calculerOperation()
            {
                QString nombre;
                int operateur = ui->operation->currentIndex();
                if(operateur == 0)
                {
                    nombre = QString::number(ui->nombre1->value() + ui->nombre2->value());
                }
                else if(operateur == 1)
                {
                    nombre = QString::number(ui->nombre1->value() - ui->nombre2->value());
                }
                else if(operateur == 2)
                {
                    nombre = QString::number(ui->nombre1->value() * ui->nombre2->value());
                }
                else if(operateur == 3)
                {
                    nombre = QString::number(ui->nombre1->value() / ui->nombre2->value());
                }
            
                ui->resultat->setText(nombre);
            
                return ?;
            }
            Encore une fois merci de votre aide.
            • Partager sur Facebook
            • Partager sur Twitter
              20 avril 2018 à 9:15:12

              Jnitech a écrit:

              Du coup j'ai passer beaucoup heure a faire se cour mais qui me serviront a rien puisque C++ a changer ?  Devrais-je arrêter de suive se cour et en suive un autre ?

              Malheureusement oui, il faut que tu recommence depuis le début car même s'il y a des points vrais dans ce que tu as appris (la syntaxe par exemple), tu n'es pas capable de faire la distinction avec ce qui était nuisible.

              Mais si tu as déjà acquis des notions, lorsque tu vas retomber dessus tu vas naturellement progresser plus vite, donc ça ne va peut-être pas aller aussi lentement que ce que tu penses. Mais ne va pas passer des parties en te disant "je connais déjà", lis bien tout.

              Jnitech a écrit:

              Mais je me demandais cette MiniCalculatrice ne peu que calculer les nombre entier et non les nombre a virgule. Pourquoi ?

              Car tu utilises le type int qui est une représentation des entiers relatifs, révise le chapitre sur les types, les nombres réels sont représenté par les types float ou double. le choix du type a un impact sur la mémoire, et un float n'est toujours qu'une approximation de part sa représentation binaire, mais un int a des limites bien plus basse. le choix du type n'est pas anodin

              Jnitech a écrit:

              Dernière questions que dois-je retourner au "return" ?

              Si toi même tu ne sais pas, on peut pas savoir. c'est toi qui défini ce que ta fonction doit faire, et comment elle doit s'intégrer au reste du programme

              • Partager sur Facebook
              • Partager sur Twitter
              Dream on, Dream on, Dream until your dream comes true
                21 avril 2018 à 3:26:26

                J'ai décider de suivre le cours de gbdivers que vous m'avez proposé. Mais se cour est en C++11 alors que nous sommes en C++17 vais encore perdre mon temps une deuxième fois ? Ce que je trouve dommage est que je trouvais des TP dans le cour OC fort intéressant par exemple le navigateur ZNavigo ou encore le logiciel de cryptographie.  Bon je vais devoir m'en passer. Merci a vous tous.
                • Partager sur Facebook
                • Partager sur Twitter
                  21 avril 2018 à 10:29:57

                  Jnitech a écrit:

                  Mais se cour est en C++11 alors que nous sommes en C++17 vais encore perdre mon temps une deuxième fois ?


                  Non puisque les nouvelles normes sont des évolutions allant dans le même sens que C++11, ce qui y était valable l'est toujours, il y a certes de belles évolutions mais elles ne change pas fondamentalement la conception d'un programme en C++. De plus, il me semble qu'il y a des encadrées qui font des appartés sur les normes suivantes dans le cours, et ce cours est celui qui a le plus de chance de se mettre à jour

                  Jnitech a écrit:

                  Ce que je trouve dommage est que je trouvais des TP dans le cour OC fort intéressant par exemple le navigateur ZNavigo ou encore le logiciel de cryptographie.

                  Tu peux toujours essayer de réaliser l'objectif du TP, mais avec ce que tu as appris, donc ne te fie pas à la correction de OC, soumet le plutôt au forum.

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Dream on, Dream on, Dream until your dream comes true
                    21 avril 2018 à 11:16:24

                    En fait, c'est du C++14 avec quelques notes sur le C++17. Mais il y a peu de choses dans le C++14 et le C++17 qui concernent directement les débutants. En surtout, c'est sur la façon de penser le code qu'il y a de très gros changement sur le C++11. Les C++14 et C++17 ne révolutionnent pas la facon de penser, ils sont dans la ligné du C++11.

                    Pour le TP ZNavigo, le cours va de toute facon trop vite sur Qt et beaucoup de ceux qui suivent le cours ne comprennent pas ce qu'ils font. N'etudies pas Qt tant que tu n'as pas des bases correctes en C++.

                    Pour le TP crypto, tu peux le faire sans problème.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 avril 2018 à 0:44:48

                      @gbdivers une approche c++03 (voir même c++98) cohérente ne change rien, le truc , c'est que comme les évolutions du langage ne sont pas dispos, on fait avec les moyens du bord, on utilise boost quand c'est possible, et dans le pire des cas, un smart pointer, ça se code...
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
                        23 avril 2018 à 1:48:37

                        Merci pour vos réponse. Je n'ai plus de questions. Merci.
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Question sur Qt et C++

                        × 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