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 :

tester bouton GTK


Sujet :

GTK+

  1. #1
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut tester bouton GTK
    j'ai un petit tp de copier en C avec GTK+ avec les boutons comme sur l'image
    Nom : img.jpg
Affichages : 318
Taille : 8,9 Ko

    comme je suis débutante, j'ai rencontré deux problèmes:

    1- en appelant le signal de coller comme sur le code, j'ai besoin de passer en paramètres les deux boutons (copier/couper) alors qu'il refuse me disant qu'il n'accepte que 4 paramètres, alors je l'ai ai déclaré globalement mais je ne sais si c'est juste car le init du gtk est dans le main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_signal_connect(buttonV,"clicked",G_CALLBACK(pasteDialog),window,buttonCopy,buttonCut);
    2- dans la fonction du signal de coller je dois tester quel bouton des deux (copier / couper) a été signalé pour que j'appelle la fonction du code approprié (code de copie / code de couper) alors comment en gtk peut-on faire ce test suivant ce schéma:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if(clic bouton copie){ 
    appel copie;
    }
    if(clic bouton couper){
    appel couper;
    }


  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    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 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Le principe de base lorsqu'on veut utiliser une fonction est d'en connaître son prototype. Bien entendu, si tu ne le respectes pas, le compilateur se fera un plaisir de te le rappeler .

    Donc, il faut commencer par accéder à la documentation officielle de la fonction : http://www.gtk.org/documentation.php. Tu choisis quelle bibliothèque t'intéresse et tu y cherches la fonction que tu veux utiliser.

    Pour le cas qui nous concerne, voila un lien direct : g_signal_connect ();.

    Effectivement cette fonction n'accepte que quatre paramètres. La solution que tu as choisi est, je dirai, le chemin le plus court pour se retrouver avec un code qui devient soit incompréhensible, soit boggué. Je suis loin, tu dois t'en douter, un aficionado des déclaration en global .

    - Bon d'accord, alors comment faire ?

    Le secret réside dans les pointeurs. Oui, je sais, c'est loin d'être simple, surtout quand on débute. La plupart des fonctions de Gtk+ dispose d'un paramètre du type gpointer (void* en C). Ce pointeur est nommé data ou userdata, selon le cas.
    Le type gpointer te permet de transmettre l'adresse d'une variable d'un type quelconque. Cela pourrait donc être un int, un char, un double...ou bien un type personnel déclaré comme une structure. Nous tenons là notre solution .

    En effet, à partir du moment où tu as plus d'une valeur à transmettre, il te faut créer une structure qui va englober toutes les variables à transmettre. Tu déclares ensuite une variable du type de la structure, tu initialises ensuite chaque variable comme bon te semble et enfin tu transmets l'adresse de cette variable aux fonctions Gtk+.

  3. #3
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    merci bien, déjà tout ce que je viens d'apprendre est de ce site, j'ai vraiment essayer de les passer dans un tableau puisqu'ils sont tous des pointeurs de type GtkWidget mais ça n'a pas fonctionné.

    et concernant le test booléen quel bouton a été cliqué?

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    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 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Montre-nous un peu de ton code pour voir comment tu essayes de transmettre ton tableau.

    Pour la question des boutons c'est secondaire pour l'instant. On y reviendra après si tu permets 😉

  5. #5
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    voilà j'ai changé et mis une structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    typedef struct gadgets{
     
     
        GtkWidget *window;
        GtkWidget *buttonC; //bouton de copie
        GtkWidget *buttonX; //bouton de couper
     
        GtkWidget *buttonV; //bouton de coller
     
     
    }gadgets;
    mais je n'arrive toujours pas à procéder car je ne sais comment tester mes boutons

  6. #6
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    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 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Tu ne dois pas donner un nom de structure identique à une définition. Comment le compilateur peut-il s'y retrouver ?

    Pour répondre plus directement à ta question tu pourrais par exemple ajouter deux booléens dans ta structure. Un pour chaque action. Tu transmets la variable du type de cette structure aux fonctions callbacks associées à chaque bouton copier/couper. Dans ces fonctions tu initialises le booléen correspondant à true. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    typedef struct Sgadgets{
        GtkWidget *window;
        GtkWidget *buttonC; //bouton de copie
        GtkWidget *buttonX; //bouton de couper
        GtkWidget *buttonV; //bouton de coller
     
        gboolean copier;
        gboolean couper; 
    }gadgets;
    Lors de l'initialisation d'une variable tu places bien copier et coller à FALSE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    gadgets datas;
     
    datas.copier = FALSE;
    datas.couper = FALSE;
    Dans les deux callbacks il te suffit ensuite de basculer l'un à TRUE et l'autre à FALSE. Dans le callback associé au bouton coller tu récupères aussi la même variable et il te suffit de tester quelle booléen est à TRUE.

  7. #7
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    merci bien je l'ai fait ce matin comme vous venez de me le dire et ça a fonctionné

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

Discussions similaires

  1. interrompre une boucle via un bouton GTK
    Par pierre_brld dans le forum GTK+
    Réponses: 6
    Dernier message: 18/06/2015, 16h34
  2. forcer la requête de largeur du bouton gtk
    Par sizixe dans le forum GTK+
    Réponses: 1
    Dernier message: 26/05/2010, 11h21
  3. Images non visibles dans les boutons Gtk
    Par Achimogata dans le forum GTK+
    Réponses: 3
    Dernier message: 02/12/2009, 20h20
  4. figer bouton gtk+
    Par marwen1986 dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 08/09/2008, 12h12
  5. [Conception] Tester quel bouton a effectué l'action
    Par Cyborg289 dans le forum Général Java
    Réponses: 6
    Dernier message: 07/07/2005, 23h50

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