Partage
  • Partager sur Facebook
  • Partager sur Twitter

GUI en SFML

débutant en C++

    10 juillet 2011 à 20:15:08

    Salut a tous, je suis débutant en C++ et je crée une GUI en SFML qui a besoin d'être réorganise
    voici un aperçu de ce que j'ai commence a crée jusqu'a present:

    GUI

    Comme vous le voyez peut être. Si un bouton ou une zonne de texte se trouve derriere le menu et que je clic.
    Les deux action sont prise en compte :(
    J'ai essayer de faire comme la GUI d'Irrlicht faire une class "GUIEnvironment" qui s'occupe de géré tout les widgets et s'occupe de ce genre de probleme.

    Je met le code minimale pour aller directement au principale:

    Button.cpp
    Button::Button(sf::Event &event, sf::Vector2f pos, sf::Vector2f size, sf::String string)
    : myEvent(event), myString(string), mySize(size), myPos(pos) //...
    {
        //...
    }
    
    //...
    
    Button* Button::GetThis()
    {
        return this;
    }
    


    GUIEnvironment.cpp
    #include <SFML/Graphics.hpp>
    #include <vector>
    #include <iostream>
    
    #include "GUIEnvironment.h"
    
    #include "event.h"
    #include "Button.h"
    #include "CheckBox.h"
    #include "Design.h"
    #include "DropDownMenu.h"
    #include "Label.h"
    #include "Slider.h"
    #include "TextBox.h"
    #include "WindowInterface.h"
    
    using namespace sf;
    using namespace std;
    
    
    
    GUIEnvironment::GUIEnvironment(sf::RenderWindow &app, sf::Event &event)
    : myApp(app), myEvent(event)
    {
    
    }
    
    
    Button* GUIEnvironment::AddButton(sf::Vector2f position, sf::Vector2f size, sf::String string)
    {
        myButton.push_back(Button(myEvent, position, size, string));
        return myButton[myButton.size() - 1].GetThis(); 
    }
    


    GUIEnvironment.h
    #ifndef DEF_GUIENVIRONMENT
        #define DEF_GUIENVIRONMENT
        
        #include <SFML/Graphics.hpp>
        #include <vector>
        
        #include "Button.h"
        #include "CheckBox.h"
        #include "Design.h"
        #include "DropDownMenu.h"
        #include "Label.h"
        #include "Slider.h"
        #include "TextBox.h"
        #include "WindowInterface.h"
        
        
        class GUIEnvironment
        {
            public:
                
                GUIEnvironment(sf::RenderWindow &app, sf::Event &event);
                
                Button *AddButton(sf::Vector2f pos, sf::Vector2f size, sf::String string = sf::String());
                
                
                
            private:
                
                sf::RenderWindow &myApp;
                sf::Event &myEvent;
                std::vector<Button> myButton;
                std::vector<CheckBox> myCheckBox;
                std::vector<DropDownMenu> myDropDownMenu;
                std::vector<Label> myLabel;
                std::vector<Slider> mySlider;
                std::vector<TextBox> myTextBox;
                std::vector<WindowInterface> myWindow;
                
                
        };
        
        
        
    #endif
    


    main.cpp
    GUIEnvironment gui(app, event);
    Button *unBouton = NULL;
    unBouton = gui.AddButton(Vector2f(25, 85), Vector2f(75, 25), String("Post"));
    




    Passons au probleme maintenant.
    Vous pouvez voir que je manipule des "vector" pour stocker tout mes widgets dans la mémoire. Tous mes wigets sont stocker dans GUIEnvironment pour me permettre ensuite de les manipulers. J'ai un probleme de compilation ligne 31 et 32 de mon fichier GUIEnvironmet.cpp

    myButton.push_back(Button(myEvent, position, size, string));
    return myButton[myButton.size() - 1].GetThis();
    


    Je ne comprend pas d'ou vient l'erreur. Voila si vous pouvez m'expliquer l'erreur que j'ai commise j'en serais ravis :)
    Si vous avez des questions sur mon code ou quelque chose d'autre posez les
    • Partager sur Facebook
    • Partager sur Twitter
      10 juillet 2011 à 20:34:58

      Quel est le message d'erreur ?

      En passant, la méthode GetThis() est inutile. Si on a un objet Button, on obtient tout simplement son adresse en faisant &objet, pas besoin de faire objet.GetThis().
      • Partager sur Facebook
      • Partager sur Twitter
        10 juillet 2011 à 20:47:30

        Merci :) Mince la je me sent vraiment debutant si j'oublie un truc pareil ^^

        Le message d'erreur est un peu long et pas jolie en plus:

        In file included from GUIEnvironment.h:7,
                         from GUIEnvironment.cpp:5:
        Button.h: In member function 'Button& Button::operator=(const Button&)':
        Button.h:7:   instantiated from 'void std::vector<_Tp, _Alloc>::_M_insert_aux(__gnu_cxx::__normal_iterator<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer, std::vector<_Tp, _Alloc> >, const _Tp&) [with _Tp = Button, _Alloc = std::allocator<Button>]'
        d:\dev-cpp\bin\../lib/gcc/mingw32/4.4.0/include/c++/bits/stl_vector.h:741:   instantiated from 'void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = Button, _Alloc = std::allocator<Button>]'
        GUIEnvironment.cpp:31:   instantiated from here
        Button.h:7: error: non-static reference member 'sf::Event& Button::myEvent', can't use default assignment operator
        
        In file included from d:\dev-cpp\bin\../lib/gcc/mingw32/4.4.0/include/c++/vector:69,
                         from d:\dev-cpp\bin\../lib/gcc/mingw32/4.4.0/include/c++/queue:62,
                         from d:\dev-cpp\bin\../lib/gcc/mingw32/4.4.0/../../../../include/SFML/Window/Window.hpp:40,
                         from d:\dev-cpp\bin\../lib/gcc/mingw32/4.4.0/../../../../include/SFML/Window.hpp:37,
        
                         from d:\dev-cpp\bin\../lib/gcc/mingw32/4.4.0/../../../../include/SFML/Graphics.hpp:32,
                         from GUIEnvironment.cpp:1:
        d:\dev-cpp\bin\../lib/gcc/mingw32/4.4.0/include/c++/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_insert_aux(__gnu_cxx::__normal_iterator<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer, std::vector<_Tp, _Alloc> >, const _Tp&) [with _Tp = Button, _Alloc = std::allocator<Button>]':
        d:\dev-cpp\bin\../lib/gcc/mingw32/4.4.0/include/c++/bits/vector.tcc:312: note: synthesized method 'Button& Button::operator=(const Button&)' first required here


        D'autre Question?

        Aller encore un peu d'aide SVP le probleme qui reste est lorsque je veux allouer un nouveau bouton dans un vector
        myButton.push_back(Button(myEvent, position, size, string));
        

        Quel est le probleme? qu'est ce qui n'est pas bon dans ce code quelqu'un a une idee? Poster quelque chose qui pourrait peut etre poser probleme. Une hypothese juste ou fausse SVP

        • Partager sur Facebook
        • Partager sur Twitter
          11 juillet 2011 à 21:10:07

          un petit UP pour que tout le monde puisse voir ce manifique casse téte inventer par moi même ^^

          Sinon si quelqu'un trouve une autre façon de remedier au probleme. Je suis la pour ecouter vos conseils. Merci pour les reponses :)
          • Partager sur Facebook
          • Partager sur Twitter
            11 juillet 2011 à 21:14:59

            Je n'ai pas le temps de lire le code, mais attribuer un flag de type entier à chaque widget qui coresponderait à sa place sur le plan (0 : arrière plan, 1 : devant le 0, etc).. Et ensuite traiter le widget qui a le flag le plus élevé ?

            Ché pas, c'est le premier truc qui me vient à l'esprit
            • Partager sur Facebook
            • Partager sur Twitter
              11 juillet 2011 à 21:32:35

              Oui justement c'est un peu sa l'idee que je veux réaliser en créant cette classe GUIEnvironment qui s'implifierai tout. le probléme qui reste encore ce sont ces "vector" qui refuse d'ajouter une place pour accueillir un nouveau bouton :s
              • Partager sur Facebook
              • Partager sur Twitter
                12 juillet 2011 à 19:47:40

                Moi je me dit plusieurs choses :
                1) La GUI d'Irrlicht est très mal foutue à mon avis (d'ailleurs, ce n'est pas le même système du tout ce que tu crées !)
                2) Tu ferais mieux de faire des vector sur pointeurs, ça t'éviterais 2-3 problèmes monstrueux...
                3) Ton problème se situe dans Bouton.h, peux-t-on voir le code ?
                • Partager sur Facebook
                • Partager sur Twitter

                GUI en SFML

                × 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