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

Discussion :

Appel d'une fonction par un clic

  1. #1
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut Appel d'une fonction par un clic
    Bonjour,
    je débute juste sur Qt, et mon problème est très basique et trivial je pense et pourtant je n'y arrive pas
    je lance un programme depuis Qt (un jeu de carte pour l'exemple, mais c'est juste pour l'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
    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
    #include <QApplication>
    #include <QPushButton>
    #include <QWidget>
    #include <QProcess>
    class fenetre
    {
    private slots:
    void jouer();
    };
    void jouer();
    int main(int argc, char *argv[])
    {
        //QFont maPolice("courier");
        QApplication app(argc,argv);
        QWidget fenetre;
        fenetre.setGeometry(200,100,600,400);
        fenetre.show();
        QPushButton bouton("tu veux jouer aux cartes ?", &fenetre );
        QObject::connect(&bouton, SIGNAL(clicked()),&app, SLOT(jouer()));
        bouton.setText("Pimp mon bouton !");
        bouton.setIcon(QIcon("smile.png"));
        //bouton.setFont(maPolice);
        bouton.setFont(QFont("Comic Sans MS",20));
        bouton.setToolTip("Texte d'aide");
        bouton.setGeometry(100,150,400,140);
        bouton.show();
        QPushButton quit("Quitter", &fenetre);
        quit.setGeometry(450,300,100,40);
        quit.setFont(QFont("Times",18,QFont::Bold));
        QObject::connect(&quit, SIGNAL(clicked()),&app, SLOT(quit()));
     
    //jouer();
     
        quit.show();
        return app.exec();
    }
    void jouer()
    {
      QProcess::execute("\"c:\\Program Files\\Microsoft Games\\FreeCell\\FreeCell.exe\"");
    }
    apparemment cette ligne n'appelle pas ma fonction jouer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QObject::connect(&bouton, SIGNAL(clicked()),&app, SLOT(jouer()));
    qu'est ce que je n'ai pas compris ?
    NB ma fonction jouer() fonctionne car si je l'appelle hors du bouton ca se lance (ligne mise en commentaire)
    Merci de votre aide

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    août 2008
    Messages
    26 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2008
    Messages : 26 159
    Points : 185 897
    Points
    185 897
    Par défaut


    Si tu utilises Qt 5, mieux vaut utiliser la syntaxe "moderne" pour les connexions : https://wiki.qt.io/New_Signal_Slot_Syntax. En l'état, tu tentes d'appeler la méthode jouer() de l'objet app, ce qui n'a pas vraiment de sens. Dans ton code, tu as une classe Fenetre qui n'hérite pas de QObject, ce qui fait que définir des slots n'a pas beaucoup de sens ; de plus, tu n'implémentes jamais cette méthode (mais bien la fonction libre jouer, indépendante de toute classe). Finalement, tu n'utilises jamais cette classe Fenetre .

    Ceci fonctionnerait-il mieux ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QObject::connect(&bouton, &QButton::clicked, jouer);
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut
    merci Dourouc05
    Effectivement ça marche avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        QObject::connect(&bouton, &QPushButton::clicked, jouer);
    d'autre part je voudrais bien récupérer l'information d'ouverture et de fermeture du "jeu" pour pouvoir en tirer des durées d'utilisation, mais je ne sais pas comment faire.

    Oui je suis sous Qt5.14.0 avec Qt Creator 4.11.0.
    Tu as raison pour la modernité du langage, mais n'ayant pas de formation je me documente sur des tutos et des forums, mais malheureusement ils sont d'ages variables.
    D'autre part j'ai acheté le livre d'occasion "programmer avec Qt" de Matthias Kalle Dalbeimer et quand je l'ai reçu catastrophe il est de 2000. intéressant mais complètement obsolète.
    si quelqu'un a des pistes sur des formations basiques (pour débutant) et recentes je suis preneur. ce voudrais me tourner vers qtDesigner rapidement.
    Merci encore de ton aide Dourouc et merci à tous

Discussions similaires

  1. Appel d'une fonction par un évenement
    Par vaneck dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/05/2011, 10h45
  2. Appel d'une fonction par une string depuis un plugin
    Par cahnory dans le forum jQuery
    Réponses: 1
    Dernier message: 04/06/2010, 22h11
  3. Appel d'une fonction par une autre
    Par maparè dans le forum Langage
    Réponses: 3
    Dernier message: 01/03/2010, 16h57
  4. Appel d'une fonctions par plusieurs Form
    Par developppez dans le forum Windows Forms
    Réponses: 5
    Dernier message: 22/12/2008, 02h56
  5. appel d'une fonction par variable
    Par jgarin dans le forum VBA Access
    Réponses: 2
    Dernier message: 02/01/2008, 13h56

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