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 :

Signal de clic pour un QLabel

  1. #1
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 316
    Points : 126
    Points
    126
    Par défaut Signal de clic pour un QLabel
    Bonjour,

    J'essaye de comprendre comment faire que ui->Qlabel (qtdesigner), prenne en compte le signal on_label_clicked() :

    J'ai trouvé cette exemple :

    Mainwindow.h :
    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
    #ifndef MYQTAPP_H
    #define MYQTAPP_H 
    #include "ui_MainWindow.h"
    class myQtApp : public QMainWindow, private Ui::MainWindow
    {
        Q_OBJECT 
    public:
        myQtApp(QWidget *parent = 0);
    public slots:
        void doSomething();
    };
    class MyLabel : public QLabel
    {
    	Q_OBJECT
    protected:
      void mousePressEvent(QMouseEvent * e);
    signals:
      void clicked(const QPoint & pos);
    };
    #endif
    mainwindow.cpp :

    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
    #include <QtGui>
    #include "mainwindow.h" 
    myQtApp::myQtApp(QWidget *parent)
    {
        setupUi(this); // this sets up GUI
        connect( MyLabel, SIGNAL( clicked() ), this, SLOT( doSomething() ) );
    }
    void MyLabel::mousePressEvent(QMouseEvent * e)
    {
      QLabel::mousePressEvent(e);
      emit clicked(e->pos());
    }
    void myQtApp::doSomething()
    {
    	qDebug("Hello");
    }
    J'ai le message d'erreur suivant :
    Démarrage de I:\Programmation\C++\uilabelclicked\TEST17\debug\TEST17.exe...Object::connect: No such signal QLabel::MyLabel::clicked() in mainwindow.cpp:11
    Pourquoi il ne trouve pas le signal ?

    Cordialement

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Points : 68
    Points
    68
    Par défaut
    EDIT :

    Bonjour,

    C'est parce que tu réalises ta connexion en écrivant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect( MyLabel, SIGNAL( clicked() ), this, SLOT( doSomething() ) );
    Tu lui demandes d'envoyer le signal clicked() alors que le seul signal qui existe est clicked(QPoint)

  3. #3
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 316
    Points : 126
    Points
    126
    Par défaut
    Cela ne change rien

    Cordialement

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Points : 68
    Points
    68
    Par défaut
    N'oublie pas le "détail" important des paramètres !

  5. #5
    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 : 35
    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
    Où est défini l'objet dont tu connectes le signal ? Je ne le vois pas.

  6. #6
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 316
    Points : 126
    Points
    126
    Par défaut
    C'est un QLabel defnie par Qtdesigner nomée MyLabel

    cordialement

  7. #7
    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 : 35
    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
    Oui donc dans ce cas il y a un méli-mélo entre la classe MyLabel qui hérite de la classe de ton objet MyLabel dans l'UI (soit QLabel), alors qu'il devrait être un MyLabel pour utiliser un signal clicked(). C'est confus ? Dans ce cas tu devrais éviter de nommer des choses différentes pareil

  8. #8
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 316
    Points : 126
    Points
    126
    Par défaut
    je voudrais dans qtdesigner affecter Mylabel (a Mylabe, que je pourrais appeler autrementl) et je ne sais pas comment faire !!!

    je comprend mieux pourquoi cela ne marche pas ...

    mais comment affecter une classe derivée dans qt designer ?

    cordialement

  9. #9
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 316
    Points : 126
    Points
    126
    Par défaut
    Grace a Troudhyl, j'ai regarde de plus pres comment promouvoir ma classe de base QLabel en MyLabel.

    Donc, dans Qtdesigner j'ai :

    Nom de mon QLabel : MyLabel2
    Promu en MyLabel, fichier d'entête : mainwindow.h

    dans mainwindow.cpp j'ai remplacé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect( MyLabel, SIGNAL( clicked() ), this, SLOT( doSomething() ) );
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect( MyLabel2, SIGNAL( clicked() ), this, SLOT( doSomething() ) );
    j'ai entre autre le message d'erreur :

    I:\Programmation\C++\TEST17\ui_MainWindow.h:31: erreur : ISO C++ forbids declaration of 'MyLabel' with no type
    vous pouvez m'orienter ?

    Cordialement

  10. #10
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 316
    Points : 126
    Points
    126
    Par défaut
    Bonjour,

    J'ai fais d'autres tests... toujours même message.

    je vous joint le programme test, si quelqu'un peut m'aider...

    Cordialement
    Fichiers attachés Fichiers attachés

  11. #11
    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 : 35
    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
    Bon tu as commencé à mettre MyLabel dans des fichiers dédiés... mais tu n'as pas fini, y'a encore du MyLabel dans mainwindow.cpp.
    Dans mainwindow.ui, ta promotion en MyLabel pointe encore sur mainwindow.h.
    Dans myLabel.cpp, c'est <QLabel> qu'il faut #include.
    Et sûrement d'autres choses étranges mais qui n'empêchent pas le fonctionnement.

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Points : 68
    Points
    68
    Par défaut
    Citation Envoyé par Troudhyl Voir le message
    Bon tu as commencé à mettre MyLabel dans des fichiers dédiés... mais tu n'as pas fini, y'a encore du MyLabel dans mainwindow.cpp.
    Dans mainwindow.ui, ta promotion en MyLabel pointe encore sur mainwindow.h.
    Dans myLabel.cpp, c'est <QLabel> qu'il faut #include.
    Et sûrement d'autres choses étranges mais qui n'empêchent pas le fonctionnement.
    C'est vrai que ca ressemble à un problème d'inclusion et rien d'autre.
    Dans mainwindow.ui effectivement, il faut modifier la classe référente, plutôt pour une question de cohérence puisque de toute manière, mylabel.h est inclu dans mainwindow.h .

    Sinon, tas redéfinition de MyLabel::mousePressEvent() dans mainwindow.cpp, qui par ailleurs a pas les bons arguments, ne sert à rien et va te générer une erreur quand tu auras réglé le problème du label.

  13. #13
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 316
    Points : 126
    Points
    126
    Par défaut
    J'ai fais les transformations que troudhyl m'a suggerer mais ...

    no matching function for call to 'MyLabel::MyLabel(QWidget*&)'
    j'ai mis mes changements en piece jointe
    Fichiers attachés Fichiers attachés

  14. #14
    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 : 35
    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
    Un petit effort ? Les sources sont pas longues et il n'y a rien de sorcier là-dedans.

    A quoi te sert #include <ui_MainWindow.h> dans myLabel.h par exemple, qui fait sûrement une inclusion circulaire ? Et concernant l'erreur précise, où est le constructeur classique des objets Qt pour passer un lien de parenté ?

  15. #15
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 316
    Points : 126
    Points
    126
    Par défaut
    En reprenant tout a zero ...ça Marche !!!! merci a Tous

    voici ma solution en fichier joint :
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Double clic pour actionner un lien
    Par Byrdsmann dans le forum Flash
    Réponses: 3
    Dernier message: 25/04/2007, 11h40
  2. signal d'erreur pour la dclaration d'un tableau
    Par sandball22 dans le forum C
    Réponses: 2
    Dernier message: 20/04/2007, 11h03
  3. double clic pour activer mon SWF sous IE
    Par raldine dans le forum Flash
    Réponses: 1
    Dernier message: 15/02/2007, 13h26
  4. Detection clic pour sortie boucle attente
    Par julien_dps dans le forum C++
    Réponses: 1
    Dernier message: 06/09/2006, 13h35
  5. [HTML] clic pour afficher div -> page revient en haut
    Par grinder59 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 04/05/2006, 10h12

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