Précédent   Forum des professionnels en informatique > Général Développement > Programmation système > Linux > GTK
GTK Vos questions sur GTK sous Linux
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/02/2011, 21h47   #1
Invité régulier
 
Homme
dessinateur projeteur VRD
Inscription : mars 2009
Messages : 26
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : dessinateur projeteur VRD
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : mars 2009
Messages : 26
Points : 9
Points : 9
Par défaut [ GTKMM ] effacer les lignes dans un TREEVIEW

Débutant en C++ et GTKMM

Existe t'il une fonction pour effacer toutes les lignes dans un TREEVIEW ?

Doit-on faire un test avant d'effacer la liste ?

J'ai utilisé la fonction
clear ()

mais j'ai une erreur de segmentation...
LM_programme est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 21h37   #2
Membre du Club
 
Inscription : mai 2010
Messages : 29
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 29
Points : 44
Points : 44
Essai de voir ce qui ne va pas avec gdb et dit nous ce qu'il en ressort...
Terry-Slipknot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 22h13   #3
Invité régulier
 
Homme
dessinateur projeteur VRD
Inscription : mars 2009
Messages : 26
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : dessinateur projeteur VRD
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : mars 2009
Messages : 26
Points : 9
Points : 9
Voici mon code :
mon fichier

Classe_fenetre.hpp

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
 
#ifndef DEF_CLASSE_FENETRE
#define DEF_CLASSE_FENETRE
#include <gtkmm/main.h>
#include <gtkmm/window.h>
#include <gtkmm/label.h>
#include <gtkmm/table.h>
#include <gtkmm/alignment.h>
#include <gtkmm/spinbutton.h>
#include <gtkmm/adjustment.h>
#include <gtkmm/entry.h>
#include <gtkmm/treeview.h>
#include <gtkmm/liststore.h>
#include <gtkmm/scrolledwindow.h>
#include <glibmm/ustring.h>
class Fenetre : public Gtk::Window 
{
   public:
      Fenetre();
      virtual ~Fenetre();
      void Calculer_pret();
   /* Modele de colonne pour le tableau d'amortissement */
      class Agencement : public Gtk::TreeModel::ColumnRecord
      {
         public:
	    Agencement()
	    {
	       add(m_col_echeance);
	       add(m_col_mensualite);
	       add(m_col_interet);
	       add(m_col_restant);
	       add(m_col_rembourser);
	    }
	    Gtk::TreeModelColumn<unsigned int> m_col_echeance;
	    Gtk::TreeModelColumn<float> m_col_mensualite;
	    Gtk::TreeModelColumn<unsigned int> m_col_interet;
	    Gtk::TreeModelColumn<unsigned int> m_col_restant;
	    Gtk::TreeModelColumn<unsigned int> m_col_rembourser;
      };
   private:
      Gtk::Table Tableau;
      /* Widgets pour la partie vos revenus */ 
      Gtk::Label Titre_1;
      Gtk::Label Etiquette_1;
      Gtk::Label Etiquette_2;
      Gtk::Adjustment Tolerance_sal_1;
      Gtk::Adjustment Tolerance_sal_2;
      Gtk::SpinButton Btn_compteur_sal_1;
      Gtk::SpinButton Btn_compteur_sal_2;
      Gtk::Label Etiquette_euro_1;
      Gtk::Label Etiquette_euro_2;
      /* Widgets pour la partie votre pret */ 
      Gtk::Label Titre_2;
      Gtk::Label Etiquette_3;
      Gtk::Label Etiquette_4;
      Gtk::Label Etiquette_5;
      Gtk::Adjustment Tolerance_pourcent;
      Gtk::Adjustment Tolerance_duree;
      Gtk::Adjustment Tolerance_montant;
      Gtk::SpinButton Btn_compteur_pourcent;
      Gtk::SpinButton Btn_compteur_duree;
      Gtk::SpinButton Btn_compteur_montant;
      Gtk::Label Etiquette_pourcent;
      Gtk::Label Etiquette_duree;
      Gtk::Label Etiquette_montant;
      /* Widgets pour la partie résultats */ 
      Gtk::Label Titre_3;
      Gtk::Label Etiquette_6;
      Gtk::Label Etiquette_7;
      Gtk::Label Etiquette_8;
      Gtk::Label Etiquette_9;
      Gtk::Adjustment Tolerance_mensualite;
      Gtk::SpinButton Btn_compteur_mensualite;
      Gtk::Entry Resultat_mensualite_maxi;
      Gtk::Entry Resultat_capacite_emprunt;
      Gtk::Entry Resultat_interet;
      Gtk::Label Etiquette_mensualite;
      Gtk::Label Etiquette_mensualite_maxi;
      Gtk::Label Etiquette_capacite_emprunt;
      Gtk::Label Etiquette_interet;
      /* Widgets pour la partie tableau d'amortissement */ 
      Gtk::ScrolledWindow barredefilement;
      Agencement Tableau_amortissement;
      Gtk::TreeView m_Tableau_pret;
      Glib::RefPtr<Gtk::ListStore> m_refTreeModel;
      /* Widgets pour la partie des boutons */ 
      Gtk::Button Btn_calculer;
      Gtk::Button Btn_quit;
};
#endif
Mon fichier

Classe_fenetre.cpp
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# include <iostream>
# include "Classe_fenetre.hpp"
# include "Classe_formule_credit.cpp"
Fenetre::Fenetre () :
Tableau (10,15,false),
/* Données des widgets de la partie Vos revenus */
Titre_1 ("",Gtk::ALIGN_LEFT),
Etiquette_1 ("Paie du 1er emprunteur :", Gtk::ALIGN_RIGHT, Gtk::ALIGN_TOP),
Etiquette_2 ("Paie du 2ème emprunteur :", Gtk::ALIGN_RIGHT, Gtk::ALIGN_TOP),
Tolerance_sal_1 (1000,0,99999,10),
Tolerance_sal_2 (1000,0,99999,10),
Btn_compteur_sal_1 (Tolerance_sal_1),
Btn_compteur_sal_2 (Tolerance_sal_2),
Etiquette_euro_1 ("€",Gtk::ALIGN_LEFT),
Etiquette_euro_2 ("€",Gtk::ALIGN_LEFT),
/* Données des widgets de la partie Votre pret */
Titre_2 ("",Gtk::ALIGN_LEFT),
Etiquette_3 ("Taux d'intérêt :", Gtk::ALIGN_RIGHT, Gtk::ALIGN_TOP),
Etiquette_4 ("Durée de l'emprunt:", Gtk::ALIGN_RIGHT, Gtk::ALIGN_TOP),
Etiquette_5 ("Somme empruntée :", Gtk::ALIGN_RIGHT, Gtk::ALIGN_TOP),
Tolerance_pourcent (3.50,1.00,20.00,0.01),
Tolerance_duree (10,1,30,1),
Tolerance_montant (100000,1000,9999999,100),
Btn_compteur_pourcent (Tolerance_pourcent,1.0,2),
Btn_compteur_duree (Tolerance_duree),
Btn_compteur_montant (Tolerance_montant),
Etiquette_pourcent ("%",Gtk::ALIGN_LEFT),
Etiquette_duree ("ans",Gtk::ALIGN_LEFT),
Etiquette_montant ("€",Gtk::ALIGN_LEFT),
/* Données des widgets de la partie résultats */
Titre_3 ("",Gtk::ALIGN_LEFT),
Etiquette_6 ("Votre mensualité est de :", Gtk::ALIGN_RIGHT, Gtk::ALIGN_TOP),
Etiquette_7 ("Votre mensualité maxi est de :", Gtk::ALIGN_RIGHT, Gtk::ALIGN_TOP),
Etiquette_8 ("Votre capacité d'emprunt est de :", Gtk::ALIGN_RIGHT, Gtk::ALIGN_TOP),
Etiquette_9 ("Les intérêts total pour votre prêt :", Gtk::ALIGN_RIGHT, Gtk::ALIGN_TOP),
Tolerance_mensualite (0,0,20000.00,1),
Btn_compteur_mensualite (Tolerance_mensualite,1.0,2),
Etiquette_mensualite ("€",Gtk::ALIGN_LEFT),
Etiquette_mensualite_maxi ("€",Gtk::ALIGN_LEFT),
Etiquette_capacite_emprunt ("€",Gtk::ALIGN_LEFT),
Etiquette_interet ("€",Gtk::ALIGN_LEFT),
/* Les boutons */
Btn_calculer ("Calculer"),
Btn_quit ("Quitter")
{
   /* Configuration de la fenetre */
   resize(700, 500);
   set_title("Calcul de votre prêt immobilier");
   set_border_width(10);
   set_position(Gtk::WIN_POS_CENTER);
   add(Tableau);
   /* Les éléments pour la rubrique "Vos revenus" */
      /* 1er ligne */
         Tableau.attach(Titre_1,0,3,0,1,Gtk::FILL, Gtk::FILL,5,5);
   	 Titre_1.set_markup("<u>Vos revenus</u>");
      /* 2ème ligne */
         /* information par bulle */
         Btn_compteur_sal_1.set_tooltip_text("--- Champs de saisie obligatoire ---\nEntrer directement la paie du premier emprunteur");  
	 Tableau.attach(Etiquette_1,0,1,1,2,Gtk::FILL, Gtk::FILL,5,5);
         Tableau.attach(Btn_compteur_sal_1,1,2,1,2,Gtk::FILL, Gtk::FILL,0,0);
	 Tableau.attach(Etiquette_euro_1,2,3,1,2,Gtk::FILL, Gtk::FILL,5,5);
      /* 3ème ligne */
         Tableau.attach(Etiquette_2,0,1,2,3,Gtk::FILL, Gtk::FILL,5,5);
	 Tableau.attach(Btn_compteur_sal_2,1,2,2,3,Gtk::FILL, Gtk::FILL,0,0);
	 Tableau.attach(Etiquette_euro_2,2,3,2,3,Gtk::FILL, Gtk::FILL,5,5);
   /* Les éléments pour la rubrique "Le prêt" */
      /* 1er ligne */
   	 Tableau.attach(Titre_2,0,3,3,4,Gtk::FILL, Gtk::FILL,5,5);
	 Titre_2.set_markup("<u>Votre Prêt</u>");
      /* 2ème ligne */
  	 Tableau.attach(Etiquette_3,0,1,4,5,Gtk::FILL, Gtk::FILL,5,5);
	 Tableau.attach(Btn_compteur_pourcent,1,2,4,5,Gtk::FILL, Gtk::FILL,0,0);
	 Tableau.attach(Etiquette_pourcent,2,3,4,5,Gtk::FILL, Gtk::FILL,5,5);
      /* 3ème ligne */
	 Tableau.attach(Etiquette_4,0,1,5,6,Gtk::FILL, Gtk::FILL,5,5);
	 Tableau.attach(Btn_compteur_duree,1,2,5,6,Gtk::FILL, Gtk::FILL,0,0);
	 Tableau.attach(Etiquette_duree,2,3,5,6,Gtk::FILL, Gtk::FILL,5,5);
      /* 4ème ligne */
	 Tableau.attach(Etiquette_5,0,1,6,7,Gtk::FILL, Gtk::FILL,5,5);
	 Tableau.attach(Btn_compteur_montant,1,2,6,7,Gtk::FILL, Gtk::FILL,0,0);
	 Tableau.attach(Etiquette_montant,2,3,6,7,Gtk::FILL, Gtk::FILL,5,5);
   /* Les éléments pour les résultats */
      /* 1er ligne */
         Tableau.attach(Titre_3,5,10,0,1,Gtk::FILL, Gtk::FILL,5,5);
   	 Titre_3.set_markup("<u>Résultats</u>");
      /* 2ème ligne */
         Tableau.attach(Etiquette_6,5,8,1,2,Gtk::FILL, Gtk::FILL,5,5);
         Tableau.attach(Btn_compteur_mensualite,8,9,1,2,Gtk::FILL, Gtk::FILL,5,5);
         Tableau.attach(Etiquette_mensualite,9,10,1,2,Gtk::FILL, Gtk::FILL,5,5);
      /* 3ème ligne */
         Tableau.attach(Etiquette_7,5,8,2,3,Gtk::FILL, Gtk::FILL,5,5);
         Tableau.attach(Resultat_mensualite_maxi,8,9,2,3,Gtk::FILL, Gtk::FILL,5,5);
         Tableau.attach(Etiquette_mensualite_maxi,9,10,2,3,Gtk::FILL, Gtk::FILL,5,5);
      /* 4ème ligne */
         Tableau.attach(Etiquette_8,5,8,3,4,Gtk::FILL, Gtk::FILL,5,5);
         Tableau.attach(Resultat_capacite_emprunt,8,9,3,4,Gtk::FILL, Gtk::FILL,5,5);
         Tableau.attach(Etiquette_capacite_emprunt,9,10,3,4,Gtk::FILL, Gtk::FILL,5,5);
      /* 5ème ligne */
         Tableau.attach(Etiquette_9,5,8,4,5,Gtk::FILL, Gtk::FILL,5,5);
	 Tableau.attach(Resultat_interet,8,9,4,5,Gtk::FILL, Gtk::FILL,5,5);
         Tableau.attach(Etiquette_interet,9,10,4,5,Gtk::FILL, Gtk::FILL,5,5);
   /* Les éléments pour le tableau amortissement */
         barredefilement.add(m_Tableau_pret);
	 barredefilement.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_ALWAYS);
	 Tableau.attach(barredefilement,0,10,7,14);
         m_refTreeModel = Gtk::ListStore::create(Tableau_amortissement);
	 m_Tableau_pret.set_model(m_refTreeModel);
	 m_Tableau_pret.append_column(" Echéance N° ", Tableau_amortissement.m_col_echeance);
	 m_Tableau_pret.append_column(" Mensualité ", Tableau_amortissement.m_col_mensualite);
	 m_Tableau_pret.append_column(" Intérêt de la période ", Tableau_amortissement.m_col_interet);
	 m_Tableau_pret.append_column(" Amortissement de la période ", Tableau_amortissement.m_col_restant);
	 m_Tableau_pret.append_column(" Capital restant à rembourser ", Tableau_amortissement.m_col_rembourser);
   /* Les boutons */
         Tableau.attach(Btn_calculer,2,5,14,15,Gtk::FILL, Gtk::FILL,5,5);
         Tableau.attach(Btn_quit,5,6,14,15,Gtk::FILL, Gtk::FILL,5,5);
         Btn_calculer.signal_clicked().connect(sigc::mem_fun(this, &Fenetre::Calculer_pret));  
         Btn_quit.signal_clicked().connect(sigc::ptr_fun(&Gtk::Main::quit));  
   show_all();
}
Fenetre::~Fenetre ()
{
}
void Fenetre::Calculer_pret ()
{
   /* Récupération des valeurs */
   int Valeur_Sal_1 = Btn_compteur_sal_1.get_value_as_int();
   int Valeur_Sal_2 = Btn_compteur_sal_2.get_value_as_int();
   double recuperation = Btn_compteur_pourcent.get_value();
   float Valeur_interet = (float)recuperation;
   int Valeur_duree = Btn_compteur_duree.get_value_as_int();
   int Valeur_montant = Btn_compteur_montant.get_value_as_int();
   float Formule_Resultat_mensualite_maxi;
   int a;
   /* Calcul du pret */
   Pret p(Valeur_montant,Valeur_duree,Valeur_interet);
   /* Conversion int en ustring */
   // Glib::ustring convertir;
   // std::stringstream strstr;
   // strstr << p.Mensualite();
   // strstr >> convertir;
   Btn_compteur_mensualite.set_value(p.Mensualite());
   /* Calcul de la capacité d'emprunt */
   /* Conversion int en ustring */
   // Glib::ustring convertir_2;
   // std::stringstream strstr_2;
   // strstr_2 << p.Capacite_emprunt ();
   // strstr_2 >> convertir_2;
   // Resultat_capacite_emprunt.set_text(convertir_2);
   m_refTreeModel.clear();
   for ( a = 1; a < 10 ; a++)
   {
       /*Remplit le tableau */
      Gtk::TreeModel::Row row = *(m_refTreeModel->append());
      row[Tableau_amortissement.m_col_echeance] = a;
      row[Tableau_amortissement.m_col_mensualite] = p.Mensualite();
      row[Tableau_amortissement.m_col_interet] = p.Mensualite ()-p.Amortissement(a);
      row[Tableau_amortissement.m_col_restant] = p.Amortissement (a);
      row[Tableau_amortissement.m_col_rembourser] = Valeur_montant-p.Remboursement (a);
   }
}
LM_programme est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 09h07   #4
Membre du Club
 
Inscription : mai 2010
Messages : 29
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 29
Points : 44
Points : 44
T'as oublié que le modèle est une classe qui modélise un pointeur vers ton modèle (TreeStore).
Donc pourra accéder à ton modèle et pas à la classe contenante, tu doit utiliser l'opérateur "->" et non "."

Si non tu accède à la fonction clear() de RefPtr et non de TreeStore.
Terry-Slipknot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 16h23   #5
Invité régulier
 
Homme
dessinateur projeteur VRD
Inscription : mars 2009
Messages : 26
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : dessinateur projeteur VRD
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : mars 2009
Messages : 26
Points : 9
Points : 9
merci pour la remarque sur le pointeur
j'ai trouvé la solution :
Code :
1
2
3
4
5
 
   if ( m_refTreeModel->children() == 1 )
   {
      m_refTreeModel->clear();
   }
LM_programme est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h04.


 
 
 
 
Partenaires

Hébergement Web