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 :

Faut-il utiliser Glade avec GTK3 ?


Sujet :

GTK+

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Novembre 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2018
    Messages : 31
    Par défaut Faut-il utiliser Glade avec GTK3 ?
    Bonsoir,

    je travaille en ce moment sur un projet en C où j'utilise GTK3 pour interagir avec l'utilisateur.

    De ce fait, j'aimerais par exemple créer des boutons et des champs de texte pour ainsi récupérer les données que l'utilisateur aura rentré.
    J'aimerais aussi déclencher une fonction et envoyer des paramètres à celle-ci en cliquant sur un bouton.

    Je pensais donc utiliser Glade pour faire des interfaces graphiques plus rapidement mais j'avoue que je suis un petit peu perdu. J'ai beau avoir lu le tutoriel, je ne comprends toujours pas comment récupérer une donnée d'un champ texte, et je suis tombé sur des articles disant que l'utilisation de Glade et des signaux est limitée.

    Qu'est-ce que vous me conseilleriez d'utiliser dans mon cas ?

    Merci.

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

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

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

    Avant d'utiliser Glade il est bon d'essayer de construire son interface directement dans le code source. Si cette première étape ne te pose aucun problème, je sous-entends aussi par là récupérer les données et interactions des différents widgets qui la compose, alors tu peux passer à l'étape suivante qui est l'utilisation de Glade.

    Regarde dans ma signature il y a un lien sur un tuto que j'ai écrit il y a un petit moment déjà.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Novembre 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2018
    Messages : 31
    Par défaut
    Merci beaucoup pour ta réponse,

    effectivement j'ai déjà lu ton tutoriel, et merci d'ailleurs, mais je suis bloqué à partir des signaux et particulièrement des user_data, en fait je ne comprends pas comment transmettre plusieurs données au lieu d'une même si je sais qu'il faut utiliser une structure apparemment.

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Créer une structure permet d'encapsuler plusieurs données accessible à une seule adresse.

    Comme le "user_data" des fonctions callbacks de Gtk+ est un pointeur sur une adresse, il te suffit de transmettre l'adresse de la variable qui aura comme type la structure de ton choix.

    Exemple:

    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
    // Déclaration d'une structure
    #typedef struct {
    int a;
    int b;
    int c;
    } Structure;
    
    // Déclaration d'une variable de type Structure
    Structure variable;
    
    // Déclaration d'un GtkButton pour l'exemple
    GtkWidget *button = gtk_button_new_with_label ("bouton");
    
    // Affectation d'un callback au signal "clicked" du bouton. On transmet à ce callback l'adresse de la variable "variable"
    g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (cb_clicked), &variable);
    Dans la fonction cb_clicked(); on récupère l'adresse de variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void cb_clicked (GtkButton *button, gpointer user_data)
    {
      Structure *variable = (Structure*) user_data; // Casting du pointeur générique récupéré
     
      variable->a = 10;
      variable->b = 20;
      variable->c = 30;
    }
    Il est possible de caster directement les pointeurs transmis ce qui raccourci un peu le code et donne plus de lisibilité.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void cb_clicked (GtkButton *button, Structure *variable)
    {
      variable->a = 10;
      variable->b = 20;
      variable->c = 30;
    }

  5. #5
    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
    Par défaut
    Personnellement, je recommande ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void cb_clicked (GtkButton *button, gpointer user_data)
    {
      Structure *variable = user_data;
     
      variable->a = 10;
      variable->b = 20;
      variable->c = 30;
    }
    Pas de cast explicite, car un gpointer est un void* et se caste vers tout type de pointer. Pas de changement de la signature de la fonction, ce qui permet à la lecture de bien voir que c'est un paramètre user_data où on peut passer ce qu'on veut et pas un paramètre obligatoire du signal.

  6. #6
    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
    Par défaut
    Si tu débutes, le plus simple est sans doute de créer ton interface avec glade, et de connecter tes signaux manuellement dans ton programme, avec g_signal_connect. C'est le meilleur compromis quand on débute je pense. Pas besoin de spécifier le nom de tes callbacks dans les widgets de ton fichier glade. Essaie déjà comme cela de gérer un cas simple: créer une fenêtre avec un bouton à l'intérieur qui fait affiche quelque chose sur la console quand on clique dessus.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FAQ] Comment utiliser glade avec GtkBuilder ?
    Par Rachel dans le forum Contribuez
    Réponses: 2
    Dernier message: 01/11/2012, 12h55
  2. utiliser glade avec python sous windows
    Par sakura.sou dans le forum EDI/RAD
    Réponses: 1
    Dernier message: 25/07/2009, 09h31
  3. Réponses: 5
    Dernier message: 17/05/2007, 01h19
  4. Faut-il combiner Spring avec Struts ou utiliser Spring MVC ?
    Par micanti dans le forum Frameworks Web
    Réponses: 3
    Dernier message: 23/04/2007, 16h31
  5. [RegEx] Que faut-il utiliser avec l'UFT-8 : Regex ou POSIX ?
    Par Tchinkatchuk dans le forum Langage
    Réponses: 2
    Dernier message: 07/11/2006, 17h13

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