Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt] Les SLOT et SIGNAL avec QMenu

Lequel utiliser ?

    1 février 2008 à 16:52:30

    Bonjour!

    J'ai fais un menu avec QMenuBar et QMenu, mais.. je ne sais pas comment utiser l'action, pour que quand je clique sur un QMenu, ça fasse une action précise.

    1. #include <QApplication>
    2. #include <QWidget>
    3. #include <QMainWindow>
    4. #include <QPushButton>
    5. #include <QTextEdit>
    6. #include <QFont>
    7. #include <QMenu>
    8. #include <QMenuBar>
    9. #include <QAction>
    10. #include "main.h"
    11. int main(int argc, char *argv[])
    12. {
    13.     QApplication app(argc, argv);
    14.     QWidget window;
    15.     window.resize(400, 300);
    16.     QFont font("arial", 25, -1, false);
    17.     QMenuBar * menu = new QMenuBar(&window);
    18.     QMenu * file = new QMenu("Fichier", &window);
    19.     QMenu * edition = new QMenu("Edition", &window);
    20.     menu->addMenu(file);
    21.     menu->addMenu(edition);
    22.     file->addAction("&New", file, SLOT(XXX()), QKeySequence("Ctrl+N"));
    23.     window.show();
    24.     return app.exec();
    25. }


    Qu'est-ce que je dois mettre à la place de XXX() ? Pour que je puisse faire une action précise lorsque je clique sur ce menu.

    Merci beaucoup!
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      1 février 2008 à 17:19:05

      dis, ça t'arrive de regarder la doc?

      void MainWindow::createActions()
      {
      newAct = new QAction(QIcon(":/images/new.png"), tr("&New"), this);
      newAct->setShortcut(tr("Ctrl+N"));
      newAct->setStatusTip(tr("Create a new file"));
      connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));

      voila le début d'une fonction du fichier mainwidow.cpp, pour l'exemple mainwindows/sdi :)
      • Partager sur Facebook
      • Partager sur Twitter
        1 février 2008 à 18:54:17

        Oooh. Tu voulais dire exemples ? Je viens de trouver les exemples. Ça va m'aider beaucoup!

        Merci!
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          1 février 2008 à 18:57:57

          de rien :)
          moi j'ai lue les tutos et ensuite je regarder dans les exemples pour faire ce que je veux, afin de voir quelles classes il faut utiliser :)

          par contre je te conseil d'éclaircir un peu ton code, pour du Qt, c'est pas trop clair!

          • Partager sur Facebook
          • Partager sur Twitter
            1 février 2008 à 19:02:08

            peus-tu mettre en résolu?




            -------------------------
            mon problème ==> http://www.siteduzero.com/forum-83-235980-p1-qt-probleme-pour-compiler-un-code.html
            • Partager sur Facebook
            • Partager sur Twitter
            :)
              1 février 2008 à 19:28:08

              Pour continuer dans le même ordre d'idée, je me suis fier à des exemples et encore, ça me dit : Object::connect: No such slot QMainWindow::newFile()

              Dans mon code :

              MAIN.H
              1. #ifndef MAIN_H_INCLUDED
              2. #define MAIN_H_INCLUDED
              3. #include <QApplication>
              4. #include <QWidget>
              5. #include <QMainWindow>
              6. #include <QPushButton>
              7. #include <QTextEdit>
              8. #include <QFont>
              9. #include <QMenu>
              10. #include <QMenuBar>
              11. #include <QAction>
              12. class QAction;
              13. class QMenu;
              14. class QTextEdit;
              15. class Xglobo : public QMainWindow
              16. {
              17.     public: Xglobo();
              18.     private slots: void newFile();
              19.     private: void init();
              20. };
              21. #endif // MAIN_H_INCLUDED


              MAIN.CPP:

              1. #include <QApplication>
              2. #include <QWidget>
              3. #include <QMainWindow>
              4. #include <QPushButton>
              5. #include <QTextEdit>
              6. #include <QFont>
              7. #include <QMenu>
              8. #include <QMenuBar>
              9. #include <QAction>
              10. #include "main.h"
              11. Xglobo::Xglobo()
              12. {
              13.     init();
              14. }
              15. void Xglobo::newFile()
              16. {
              17.     this->close();
              18. }
              19. void Xglobo::init()
              20. {
              21.     this->resize(400, 300);
              22.     QFont font("arial", 25, -1, false);
              23.     QAction * newAct = new QAction(tr("&New"), this);
              24.     newAct->setShortcut(tr("Ctrl+N"));
              25.     newAct->setStatusTip(tr("Create a new file"));
              26.     connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));
              27.     QMenu * fileMenu = menuBar()->addMenu(tr("&File"));
              28.     fileMenu->addAction(newAct);
              29. }
              30. int main(int argc, char *argv[])
              31. {
              32.     QApplication app(argc, argv);
              33.     Xglobo * xglobo = new Xglobo;
              34.     xglobo->show();
              35.     return app.exec();
              36. }


              Vous savez pourquoi ?
              • Partager sur Facebook
              • Partager sur Twitter
                1 février 2008 à 20:02:11

                Met la macro QOBJECT et compile avec Qmake
                • Partager sur Facebook
                • Partager sur Twitter
                :)
                  1 février 2008 à 20:17:51

                  Et pourquoi je devrais compiler avec QMAke ? Je compile présentement avec Code::Block et j'ai un erreur :

                  main.h:21: error: ISO C++ forbids declaration of `QOBJECT' with no type
                  main.h:21: error: expected `;' before "public"

                  Et avec QMake, j'ai essayé, et ça m'a encore mit plein d'erreurs ...
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    1 février 2008 à 20:26:36

                    utilise la console, c'est mieux avec Qt :)
                    tu fait ton projet avec qmake, et puis ensuite un petit make!
                    c'est facile à faire, et au moins ça marche!
                    • Partager sur Facebook
                    • Partager sur Twitter
                      1 février 2008 à 20:35:38

                      et puis moii, la macro c'est pas QOBJECT mais Q_OBJECT
                      h2o > il est recommander de ne pas compiler avec C::B car il faut gérer soit même la précompilation via moc qui gère la macro Q_OBJECT
                      • Partager sur Facebook
                      • Partager sur Twitter
                        1 février 2008 à 20:39:28

                        Lorsque je fais mon make: 'mingw32-make' n'est pas reconnu en tant que commande interne

                        Hum?
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          1 février 2008 à 21:21:00

                          regarde dans le dossier bin de ton compilo, si il n'y a pas mingw32-make.exe, alors réinstalle Qt, la version AVEC compilo :)

                          certaine version de mingw n'ont pas make
                          • Partager sur Facebook
                          • Partager sur Twitter
                            1 février 2008 à 21:50:21

                            J'ai télécharger le fichier et j'ai maintenant un erreur avec 'make' :

                            g++: installation problem, cannot exec `cc1plus': No such file or directory


                            Je ne comprend pas trop ...

                            =(

                            C'est aussi compliquer compiler un projet avec des elements Qt à l'intérieur ? Pourquoi .. j'ai déjà compiler une fenêtre en Qt avec Code::Block, et tout marchait. Jusqu'à temps que je veuille utiliser des SLOTS pour mon menubar ... Pourquoi je ne peux pas le faire avec Code::Block ?
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              1 février 2008 à 21:55:20

                              alors...
                              désolé mais je peux pas t'aider avec si peu :)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                27 mai 2008 à 15:50:14

                                a tout hazard (cf tuto Qt)

                                pour compiler, ouvrir la console

                                cd <repertoire ou se trouve les fichiers>
                                puis entrez les commandes suivantes :

                                qmake -project
                                qmake
                                make

                                en sortie un .exe
                                • Partager sur Facebook
                                • Partager sur Twitter

                                [Qt] Les SLOT et SIGNAL avec QMenu

                                × 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