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 :

Problème d'utilisation des signaux

  1. #1
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 673
    Points : 43 727
    Points
    43 727
    Par défaut Problème d'utilisation des signaux
    Bonjour,

    Je n'arrives pas à utiliser les signaux comme je le souhaites.
    En fait je cherches à lier ma routine sortie à un menu.

    Mon menu est crée via addAction, je passes en paramètres &fenetre ( correspondant à ma fenêtre contenant mon menu ) et en SLOT le nom de ma fonction.

    Au démarrage de mon application j'ai un msg dans ma console :
    "Object::connect: No such slot QMainWindow::sortie()

    Il est clair que le système de signal ne repère pas l'objet

    J'ai essayé de remplacer void sortie() par void QmainWindow::sortie(), mais là ça compile pas, cela me paraissait logique par rapport à mon msg d'erreur.

    J'ai essayé de mettre this à la place de &fenetre : msg "invalid use of 'this' in non-member function". Je m'attendais pas à ce que ça marche, this servant à indiquer "moi-même" dans un objet, j'ai tenté quand même car addAction est appelé à partir de l'objet menufile, je me suis dit que ça pouvait peut-être être tenté

    Les exemples que j'ai trouvé crée un objet contenant tous les éléments de l'application. Il est plus simple pour moi de faire comme je fais, je suis plus habitué à la programmation procédurale qu'à la programmation objet, même si j'ai bien compris le principe, l'appliquer c'est autre chose.

    Merci pour votre aide.

    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
    41
    42
    43
    44
    45
     
    #include <QApplication>
    #include <QtGui>
    #include <QLabel>
    #include <QMainWindow>
    #include <QMenu>
    #include <QMenuBar>
     
    int main(int argc, char *argv[])
    {
     
    	QApplication app(argc, argv);
    	QMainWindow fenetre;
    	int largeur_ecran=QApplication::desktop()->width();
    	int hauteur_ecran = QApplication::desktop()->height();
     
    	fenetre.setGeometry(largeur_ecran/4,hauteur_ecran/4,largeur_ecran/2,hauteur_ecran/2);
    	fenetre.setWindowTitle("Enos");
     
    	QMenuBar* menubar=new QMenuBar(&fenetre);
    	QMenu* menufile=new QMenu("Fichier");
    	menubar->addMenu(menufile);
    //	menufile->addAction("&Quitter");
    	menufile->addAction("&Quitter",&fenetre,SLOT(sortie()));
    	fenetre.setMenuBar(menubar);
     
    	QHBoxLayout* hboxlayout=new QHBoxLayout;
    	QWidget *zonecentrale=new QWidget;
    	zonecentrale->setLayout(hboxlayout);
    	fenetre.setCentralWidget(zonecentrale);	
     
    	QLabel* label=new QLabel("<center>Essai</center>");
    	label->setGeometry(10,10,10,10);
     
    	hboxlayout->addWidget(label);
     
    	fenetre.show();
     
    	return app.exec();
    } 
     
    void sortie()
    {
    	printf("Sortie demandée\n");
    }

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Il n'y a pas de fonction appelée "sortie()" dans QMainWindow, c'est toi qui l'a inventée et écrite en dessous dans aucune classe. Donc c'est sûr que ça ne peut pas marcher. Tu dois sous-classer QMainWindow et faire tout ce code dans le constructeur (et la fonction sortie() dans ta classe).

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 673
    Points : 43 727
    Points
    43 727
    Par défaut comme cela ça fonctionne
    J'ai fait ce qu'on m'a dit de faire et là ça marche. Merci

    Je voulais éviter de créer une classe. Mais pour mon info personnelle : peut-on faire sans créer ses propres classes, ou est on obligé pour que les slots fonctionnent ?
    .

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

Discussions similaires

  1. Problème d'utilisation des threads dans mes servlets
    Par casho dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 08/08/2007, 19h34
  2. Problème pour concaténer des signaux
    Par Math66 dans le forum Signal
    Réponses: 3
    Dernier message: 31/05/2007, 15h12
  3. Problème d'utilisation des files
    Par AraBorLeg dans le forum C
    Réponses: 4
    Dernier message: 06/01/2007, 20h55
  4. Réponses: 1
    Dernier message: 24/11/2006, 16h36
  5. Problème d'utilisation des attributs width et height avec une image distante
    Par Ptit_Mouss dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/09/2006, 15h40

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