Précédent   Forum du club des développeurs et IT Pro > Applications > Développement 2D, 3D et Jeux > API graphiques > SFML
SFML Forum d'entraide sur l'API SFML
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 16/06/2012, 15h42   #1
DakM
Membre du Club
 
Homme nico
Second de cuisine
Inscription : avril 2005
Messages : 143
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 : 143
Points : 42
Points : 42
Envoyer un message via MSN à DakM Envoyer un message via Skype™ à DakM
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
DakM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2012, 16h22   #2
LittleWhite
Responsable 2D/3D/Jeux


 
Avatar de LittleWhite
 
Homme Alexandre Laurent
Ingénieur développement logiciels
Inscription : mai 2008
Messages : 10 763
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 : 10 763
Points : 42 824
Points : 42 824
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.
LittleWhite est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 04h08.


 
 
 
 
Partenaires

Hébergement Web