Partage
  • Partager sur Facebook
  • Partager sur Twitter

Qt Layout

problème avec QVBoxLayout

Sujet résolu
    26 mai 2008 à 13:54:49

    Voilà j'ai fait un genre de menu ( pour le jeu des allumettes ) mais il accepte pas mon QVBoxLayout. :
    Je suis allé voir la doc mais j'ai pas beaucoup d'experience en QT :(

    Erreur : coversion from 'QVBoxLayout*' to non-scalar type 'QVBoxLayout' requested

    Voici mon code :
    Fenetre.h
    // Fenetre.h
     
    #ifndef DEF_FENETRE
    #define DEF_FENETRE
     
    #include <QtGui>
     
    class Fenetre : public QWidget
    {
        Q_OBJECT
     
        public:
        Fenetre();
     
        public slots:
     
        private:
        QPushButton *m_boutonCommencer;
        QPushButton *m_boutonQuitter;
        QLabel *m_labelMenu;
        QLabel *m_menuImage;
        QFrame *m_separator;
        QVBoxLayout *layoutv;
    };
     
    #endif
    


    Fenetre.cpp
    #include "Fenetre.h"
     
    Fenetre::Fenetre() : QWidget()
    {
        //setFixedSize(230, 120);
     
        m_separator = new QFrame;
        m_separator->setFrameShape(QFrame::HLine);
        m_labelMenu = new QLabel("Le Jeu des Allumettes");
        m_labelMenu->setAlignment(Qt::AlignHCenter);
        m_menuImage = new QLabel;
        m_menuImage->setPixmap(QPixmap("image/menu_allumettes.jpg"));
        m_boutonCommencer = new QPushButton("Commencer");
        m_boutonQuitter = new QPushButton("Quitter");
        
        QVBoxLayout layoutv = new QVBoxLayout;
        layoutv.addWidget(m_labelMenu);
        layoutv.addWidget(m_separator);
        layoutv.addWidget(m_menuImage);
        layoutv.addWidget(m_boutonCommencer);
        layoutv.addWidget(m_boutonQuitter);
        
    }
    


    Et enfin mon main.cpp
    #include <QtGui>
    #include "Fenetre.h"
    #include <QTranslator>
    #include <QLocale>
    #include <QLibraryInfo>
     
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
        
        QString locale = QLocale::system().name();
        QTranslator translator;
        translator.load(QString("qt_") + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
        app.installTranslator(&translator);
        
        Fenetre Menu;
        Menu.setLayout(layoutv);
        Menu.show();
     
        return app.exec();
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      26 mai 2008 à 14:00:08

      QVBoxLayout layoutv = new QVBoxLayout;
      

      ici faut pas mettre "QVBoxLayout" (le premier) car il est déjà déclaré en tant que membre de la classe et de toute manière, si il n'y a pas de * alors pas de "new" possible.

      layoutv.addWidget(m_labelMenu);
      

      comme c'est un pointeur, il faut faire :
      layoutv->addWidget(m_labelMenu);
      
      • Partager sur Facebook
      • Partager sur Twitter
        26 mai 2008 à 14:22:22

        Voilà ce que j'ai changé

        Fenetre.cpp
        layoutv = new QVBoxLayout;
        layoutv->addWidget(m_labelMenu);
        layoutv->addWidget(m_separator);
        layoutv->addWidget(m_menuImage);
        layoutv->addWidget(m_boutonCommencer);
        layoutv->addWidget(m_boutonQuitter);
        


        Il me met: 'layoutv' was not declared in this scope
        Pourtant il est déclaré non?
        • Partager sur Facebook
        • Partager sur Twitter
          26 mai 2008 à 14:42:34

          bonjour,

          int main(int argc, char *argv[])
          {
              QApplication app(argc, argv);
              
              QString locale = QLocale::system().name();
              QTranslator translator;
              translator.load(QString("qt_") + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
              app.installTranslator(&translator);
              
              Fenetre Menu;
              Menu.setLayout(layoutv) //<<--------ICI------------;
              Menu.show();
           
              return app.exec();
          }
          


          1) ton compilateur doit te renvoyer un n° de ligne pour l'erreur, c'est pratique si de le reporter dans le forum pour qu'on puisse t'aider, je suppose que c'est la ligne marquée.

          2) Tu n'as pas d'objet layoutv dans ton main, ca peut pas marcher. Si tu veux mettre un layout a ton menu, il faut le fabriquer.
          • Partager sur Facebook
          • Partager sur Twitter
            26 mai 2008 à 14:46:52

            c'est à peu près inutile que d'avoir un pointeur vers un layout dans la partie "private", donc remplace la ligne dans le constructeur par :
            QVBoxLayout* layoutv = new QVBoxLayout;
            

            (en n'oubliant pas d'enlever la déclaration dans le fichier header .h)

            aussi, le "setLayout" n'est pas à placer dans le main.cpp, mais plutôt juste après avoir ajouté toute les widget à ton layout.

            QVBoxLayout* layoutv = new QVBoxLayout;
            layoutv->addWidget(m_labelMenu);
            layoutv->addWidget(m_separator);
            layoutv->addWidget(m_menuImage);
            layoutv->addWidget(m_boutonCommencer);
            layoutv->addWidget(m_boutonQuitter);
            setLayout(layoutv);
            

            (en l'enlevant en même temps du main.cpp ;) )
            • Partager sur Facebook
            • Partager sur Twitter
            Altarapp.com - Applications, Code Snippets, API Wrappers et etc, le tout en C# le plus clair du temps!

            Qt Layout

            × 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