IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ Discussion :

Récupérer plusieurs variables d'entrées


Sujet :

GTK+

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Avril 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2018
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Récupérer plusieurs variables d'entrées
    Bonjour,

    Pour un projet d'école, je dois faire une application. J'ai besoin de récupérer plusieurs entrées gtk_entry...
    Je vous joins l'appel de ma fonction, ma fonction et quelques éléments en plus.

    Mon problème est que je n'arrive pas à compiler... J'avais essayé d'initialiser à nouveau "variableSimulation* variableS; variableS=malloc(sizeof(variableSimulation));" en local dans la fonction "affiche_production" afin de récupérer les entrées dans ma structure sauf que j'avais une erreur segmentation lorsque j'appuyais sur mon bouton sur mon interface. Après de multiples recherches je suis bloqué

    A bientôt et merci à vous!

    Rémi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    typedef struct variableSimulation {
    	GtkWidget *SimuWindow;
    	GtkWidget *SimuTable;
    	GtkWidget *SimuButton[5];
    	GtkWidget *SimuLabel[29];
    	GtkWidget *sEntry[5];
    }variableSimulation;
     
    void affiche_production (GtkWidget *widget, sgpointer *variableS);
     
    int main( int argc, char **argv)
    {
            variableSimulation* variableS;	
     
    	variableS=malloc(sizeof(variableSimulation));	
    	gtk_init(&argc,&argv);
     
    //fonction qui créer une fenetre et qui affiche les 5 entrées
     
            g_signal_connect(G_OBJECT(variableS->SimuButton[4]),"clicked", G_CALLBACK(affiche_production), (gpointer) variableS);
     
            gtk_main();
     
    void affiche_production (GtkWidget *widget, gpointer *variableS)
    {
    	const gchar *sText;
    	int i;
     
    	for(i=0;i<5;i++)
    	{
    		sText = gtk_entry_get_text(GTK_ENTRY(variableS->sEntry[i]));
    		printf("%s\n",sText);
    	}
    }

  2. #2
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Bonjour,

    ton code est trop incomplet. On ne voit pas la création des widgets. Je te conseille donc soit de mettre une version plus proche de ce que tu essaies de compiler. Si tu as une erreur de segmentation, je te conseille aussi l'usage d'un débogueur. Il s'arrêtera directement à l'endroit de l'instruction qui pose problème.
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

  3. #3
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 293
    Points : 4 943
    Points
    4 943
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Histoire de discuter tout de même du bout de code que tu nous as transmis, tu déclares dans la fonction main(); un pointeur variableS. Tout d'abord, si ton programme finit par avoir 10000 lignes de codes, le nom variableS te fera penser à une variable, et non à un pointeur. Essaye de trouver des noms explicites à la première lecture, ou bien à une forme de typage qui peut être de ton propre crû. Par exemple, et ceci n'est bien sûr qu'un exemple, tu pourrais nommer les pointeurs avec la lettre "P". Ainsi, toute donnée commençant par "P" te dirait "pointeur".

    Ensuite, variableS est déclaré dans le main();. Donc, tant que le programme ne sort de cette fonction, ce pointeur existe. Dans quel cas le programme sort du main(); ? Lorsque le programme s'arrête. Comme tu alloues dans le tas avec malloc();, cette espace mémoire doit être libéré avant la sortie de main();. Il manque donc un free(variableS);. D'aucuns me diront que cette libération ici sera effectuée par le système d'exploitation. Soit ! Mais c'est un principe de programmation. Si la libération est oubliée ici, elle le sera sûrement pour d'autres allocations au cœur du programme.

    Pour finir, et c'est là que les choses deviennent intéressantes , comme variableS existe tout le long de l'exécution, il n'est pas nécessaire de faire une allocation dans le tas. Il suffit de déclarer une simple variable et de transmettre l'adresse de celle-çi au reste du programme. Ainsi, pas besoin de désallouer et le nom "variableS" lui va cette fois çi comme un charme.

    Elle est pas belle la vie ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int main( int argc, char **argv)
    {
            variableSimulation variableS;
     
    	variableS=malloc(sizeof(variableSimulation);
    	gtk_init(&argc,&argv);
     
    //fonction qui créer une fenetre et qui affiche les 5 entrées
     
            g_signal_connect(G_OBJECT(variableS->SimuButton[4]),"clicked", G_CALLBACK(affiche_production), &variableS);
    ...

Discussions similaires

  1. [MySQL] [PDO] Compter résultat d'une requête ayant plusieurs variables en entrée
    Par willm_007 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 25/03/2015, 21h31
  2. Plusieurs variables en entrées d'une Textbox d'un userform
    Par facteur dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 18/11/2013, 16h49
  3. Plusieurs variables en entrées d'une Textbox d'un userform
    Par luksvibes dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/09/2013, 10h31
  4. Récupérer plusieurs variables dans un seul "input text"
    Par arkante1984 dans le forum Langage
    Réponses: 10
    Dernier message: 11/04/2008, 12h20
  5. récupèrer plusieurs variables
    Par daniel67 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/10/2007, 14h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo