Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Membre régulier
    Homme Profil pro nico
    Second de cuisine
    Inscrit en
    avril 2005
    Messages
    188
    Détails du profil
    Informations personnelles :
    Nom : Homme nico
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Second de cuisine
    Secteur : Alimentation

    Informations forums :
    Inscription : avril 2005
    Messages : 188
    Points : 72
    Points
    72

    Par défaut sfml/sfgui: Suppression de widget

    Bonjour,


    Apres avoir fait une petite boite alert (une window, un bouton et un label), j'essaye de la detruire pour liberer la memoire.

    J'utilise SFML 2.0 & SFGUI.

    Le constructeur, pour voir un peu la bete:
    Code cpp :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    AlertBox::AlertBox(const std::string& errortitle, const std::string& errortext) :
        display(true)
    {
        // The window
        dialog = sfg::Window::Create(sfg::Window::Style::TITLEBAR);
        dialog->SetTitle(errortitle);
     
     
        // The layouter
        sfg::Box::Ptr box( sfg::Box::Create( sfg::Box::VERTICAL, 5.0f ) );
     
        // The elements
        text = sfg::Label::Create(errortext);
        btn = sfg::Button::Create("Ok");
        btn->GetSignal(sfg::Widget::OnLeftClick).Connect(&AlertBox::Destroy, this);
     
        box->Pack(text);
        box->Pack(btn, false);
        dialog->Add(box);
    }

    La fonction Destroy ne change que la variable membre "display" à false.

    Dans ma boucle graphique, j'ai ceci:
    Code cpp :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
            // Boucle sur les boites alert
            for(auto itr = m_window->GetPerennials()->List().begin(); itr != m_window->GetPerennials()->List().end(); ++itr)
            {
                    // Si l'objet n'a jamais été dessiné, on l'ajoute au sfg::Desktop
                if(itr->second->Display() && !itr->second->Drawn())
                {
                    // La fonction AlertBox::GetDrawable retourne un sfg::Window::Ptr
                    desktop.Add(itr->second->GetDrawable());
                }
                else if(!itr->second->Display())
                { // Ceci est quand on vient d'appuyer sur le bouton, et que la fonction Destroy a ete appellee
                            // On supprime le sfg::Window de sfg::Desktop
                    desktop.Remove(itr->second->GetDrawable());
                }
            }
            m_window->Clear(); // sf::RenderWindow::Clear();
            desktop.Update( clock.restart().asSeconds() );
            m_window->RenderGUI(sfgui); // sfg::Display(m_window);
            m_window->Render(); // sf::RenderWindow::Display();

    Et Quand j'appuie sur le bouton, he bien le sfg::Window ne disparait pas. Il reste sur l'ecran ! Neanmoins je ne peux plus interagir.
    Il doit y avoir un probleme au niveau de Clear, ou Update.

    Quelqu'un saurais me gider?
    merci, nico

  2. #2
    Responsable 2D/3D/Jeux

    Avatar de LittleWhite
    Homme Profil pro Alexandre Laurent
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    16 668
    Détails du profil
    Informations personnelles :
    Nom : Homme Alexandre Laurent
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 16 668
    Points : 85 812
    Points
    85 812

    Par défaut

    Bonjour,

    Je dois dire que je ne sais pas vraiment.

    Peut être il faut forcer le redraw des fenêtres en dessous de votre popup.
    Sinon, je pense aussi que la signal devrait être envoyé à une des classes principales afin que ce soit celle ci qui détruise la petite fenêtre et qui la supprime de ces tableaux.
    J'ai aussi vu dans la documentation une fonction pour forcer le réaffichage d'une fenêtre. Tu peux toujours tenter.
    Vous souhaitez participer à la rubrique 2D / 3D / Jeux ? Contactez-moi
    La rubrique a aussi un blog !

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •