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+ avec C & C++ Discussion :

Gtkmm 4.0. Passage de paramètre à la fenêtre principale initiale.


Sujet :

GTK+ avec C & C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 6
    Points
    6
    Par défaut Gtkmm 4.0. Passage de paramètre à la fenêtre principale initiale.
    Bonjour.

    Un problème simple. En lançant my_app, comment passer une référence à my_class comme argument pour le constructeur de my_window ?
    Pour information my_window dérive de Gtk::Window et my_class n'a rien à voir avec Gtk lui-même.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MyClass my_class;
    (...)
    return my_app->make_window_and_run<my_window>(argc, argv, ?????)
    Merci.

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

    J'ai du mal à saisir.

    Le constructeur par défaut ne prend pas en paramètre argc et argv, ou bien je n'ai pas trouvé. Mais bon, ce n'est pas le problème ici semble-t-il.

    Ta class MyClass doit avoir un constructeur qui a en paramètres les références dont tu as besoin à l'intérieur. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class MyClass : public Gtk::Window {
    // Constructeur spécialisé
    MyClass (int *argc, char **argv, ClassArg &arg)
    };
    La méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MyClass::MyClass (int *argc, char **argv, ClassArg &arg) {
    // ici tu peux utiliser arg en passant sa référence avec le & ou bien l'utiliser directement (arg.méthode ()).
    }

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    La définition du constructeur est celle-ci :

    https://gnome.pages.gitlab.gnome.org...plication.html

    Le code ci-dessous fonctionne très bien, mais ça n'est pas ce que je veux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my_app->make_window_and_run<my_window>(argc, argv);
    Je voudrais quelque chose de cet ordre, qui ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my_app->make_window_and_run<my_window>(argc, argv, &my_class);
    Comment s'utilise ici une template ?

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 297
    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 297
    Points : 4 951
    Points
    4 951
    Billets dans le blog
    5
    Par défaut
    Au temps pour moi. Je me suis focalisé sur le Gtk::Window et non sur le Gtk::Application.

    La signature de la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    template <typename T_Window , typename... T_Args>
    int Gtk::Application::make_window_and_run (int argc, char **argv, T_Args &&... args)
    Au vu de cette signature tu peux transmettre dans les typename autant de données que tu veux. Dans ton cas il faut ajout la classe de l'objet my_class. Je ferais quelque chose de ce genre (je n'ai pas testé) en partant du principe que CMyWindow est la class dont est instanciée my_window et CMyClass pour my_class:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my_app->make_window_and_run<CMyWindow, CMyClass> (argc, argv, my_class);

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Pardon, c'est ça qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return application->make_window_and_run<MyWindow>(argc, argv);
    En revanche le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return application->make_window_and_run<MyWindow, MyClass>(argc, argv, my_class);
    retourne cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ./src/main.cpp: In function ‘int main(int, char**)’:
    ./src/main.cpp:54:91: error: cannot bind rvalue reference of type ‘MyClass&&’ to lvalue of type ‘MyClass’
       54 |         return application->make_window_and_run<MyWindow, MyClass>(argc, argv, my_class);
          |                                                                                ^~~~~~~~~~~~~~
    compilation terminated due to -Wfatal-errors.
    Je n'ai encore jamais utilisé template et opérateur &&.

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Réponses: 11
    Dernier message: 25/08/2007, 14h24
  3. Pb BDE suite a passage en Windows 2000 pro
    Par ARIF dans le forum Paradox
    Réponses: 4
    Dernier message: 18/11/2002, 11h39
  4. [VB6]Passage par référence d'une prop. d'objet à une fct
    Par -gYs- dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 02/09/2002, 08h55
  5. Passage de parametre a une anim Flash 5
    Par debug dans le forum Intégration
    Réponses: 4
    Dernier message: 03/06/2002, 17h59

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