Partage
  • Partager sur Facebook
  • Partager sur Twitter

Documentation Qt

Lecture des prototype

    5 août 2021 à 19:11:23

    Bonjour,

    Je suis actuellement des tuto en Qt et parfois j'ai du mal avec la lecture des prototype de la doc Qt.

    Exemple:

    QMenu*QMenu::addMenu(constQString&title)

    J'ai un peu de mal avec la partie "QMenu*QMenu::"

    Voilà comment je le lis et je sais que ce n'est pas correcte:

    J'ajoute un menu avec un titre de type QString à un objet de type QMenu

    Et donc je devrais faire:

    QMenu test = new QMenu;
    test->addMenu("test");


    Hors dans mon tuto:

    QMenu *menuFichier = menuBar()->addMenu("&Fichier");



    Est ce que quelqu'un pourrait en détail l'utilisation du prototype s'il vous plaît?

    Merci


    -
    Edité par cleric 5 août 2021 à 19:12:22

    • Partager sur Facebook
    • Partager sur Twitter
      5 août 2021 à 20:27:25

      Pour une fonction membre, un prototype peut s'écrire :

      ```

      TYPE_RETOUR NOM_CLASSE::NOM_FUNCTION(PARAMETRES...)

      ```

      Dans ton exemple, tu peux identifier facilement la classe, puisque c'est ce qui est devant les ::. La classe est donc QMenu.

      Et tu peux identifier que ce qui est devant NOM_CLASSE, c'est le type de retour. Donc dans ton exemple QMenu* (un pointeur sur un QMenu).

      Les 2 codes sont valides. Pour le premier, c'est comme tu l'as dit :

      cleric a écrit:

      J'ajoute un menu avec un titre de type QString à un objet de type QMenu

      test->addMenu("test");

      La particularité de ce code, c'est ce que la fonction retourne (le QMenu*) est ignoré.

      Dans le seconde code :

      QMenu *menuFichier = menuBar()->addMenu("&Fichier");

      Tu as l'objet QMenu qui est en fait le résultat d'un appel de fonction menuBar(). Mais ca ne change rien en soi. Il aurait été possible d'écrire :

      QMenu* menu = menuBar();
      QMenu *menuFichier = menu->addMenu("&Fichier");
      

      Et l'autre particularité de ce code par rapport au premier code, c'est que le type de retour est utilisé, avec "QMenu *menuFichier =" 

      • Partager sur Facebook
      • Partager sur Twitter
        6 août 2021 à 11:55:45

        Ah donc en fait quand tu dis que le retour est ignoré, c'est que je me suis pas servis de celui-ci.

        Et menuBar() retourne la barre de menu de la QMainWindow.

        Donc quand je fais :

        QMenu *test = new QMenu;
        test->addMenu("test");

        J'essais d'ajouter mon QMenu "test" à un autre QMenu test alors que j'aurais du effectivement l'ajouter à ma QMenuBar...

        Y a autre chose qui me chiffonne, dans le prototype:

        QMenu *QMenu::addMenu(constQString&title)

        Pourquoi le * n'est pas à gauche de QMenu?


        Merci pour les explications.


        • Partager sur Facebook
        • Partager sur Twitter
          6 août 2021 à 13:04:49

          Salut,

          cleric a écrit:

          Pourquoi le * n'est pas à gauche de QMenu?

          Simplement parce que l'étoile peut signifier deux choses, en fonction de la position qu'elle occupe:

          - si elle se trouve à droite du type indiqué -- ex QMenu * --, elle indique que nous avons affaire à un pointeur sur le (comprend: l'adresse mémoire à laquelle se trouve un) élément du type indiqué

          - si elle se trouve à  gauche d'une variable (qui sera alors un pointeur) -- exemple *test = 3 -- elle indique que l'on prend "ce qui se trouve à l'adresse indiquée par" le pointeur en question.

          Quand tu veux déclarer une variable (ex QMenu * menuFichier = ), ce que tu cherches à faire, c'est bien ... déclarer une variable nommée menuFichier qui sera ... un pointeur vers un élément de type QMenu.

          • Partager sur Facebook
          • Partager sur Twitter
          Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
            6 août 2021 à 16:23:22

            Merci beaucoup tout est plus claire maintenant.

            J'en profite, je cherche un livre sur le Qt 6, en avez vous à me recommander?

            • Partager sur Facebook
            • Partager sur Twitter
              24 août 2021 à 22:37:22

              Un petit up pour un livre sur Qt6 s'il vous plaît?
              • Partager sur Facebook
              • Partager sur Twitter

              Documentation Qt

              × 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