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

Qt Discussion :

Signaux et slots compatibles mais inconnectables ?


Sujet :

Qt

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 94
    Points : 82
    Points
    82
    Par défaut Signaux et slots compatibles mais inconnectables ?
    Bonjour à tous,

    J'ai une classe Af_EditableStrList (liste de chaînes qu'on peut modifier avec boutons + et -, un peu comme dans les produits Macromedia). Il y a la liste et une zone de texte qui affiche le texte de l'item sélectionné et permet de le modifier. Le tout hérite de QWidget bien évidemment.

    Dans cette classe il y a un slot updateView(QListWidgetItem* item) qui est censé mettre-à-jour la zone de texte lorsqu'on clique sur un item différent. Dans le constructeur de la classe, je fais donc ma connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QObject::connect(list, SIGNAL(itemClicked(QListWidgetItem* item)), this, SLOT(updateView(QListWidgetItem* item)));
    Ce que je ne comprends pas c'est que les signatures du signal et du slot sont correctes et pourtant il ne se passe rien quand je clique sur un item de ma liste. (Evidemment, toutes mes fonctions sont implémentées)

    Des idées?
    Merci d'avance
    Kwakanar[/code]

  2. #2
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    J'utilise QT3 et non 4 (j'avoue que réécrire bouml pour le passer en QT4 me barbe) et je ne mets pas le nom des variables, essayes donc comme cela :
    QObject::connect(list, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(updateView(QListWidgetItem*)));
    Je n'ai pas vérifié, mais l'utilisation d'une liste (QListWidgetItem) et non d'une instance unique me parait également bizarre
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 94
    Points : 82
    Points
    82
    Par défaut
    J'ai déjà essayé sans les noms de variables, ça ne marche pas non plus.
    Qu'est-ce que tu veux dire par instance unique ?

    list est un objet (pas une classe, <list> n'est PAS inclus)

    Mais encore ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 94
    Points : 82
    Points
    82
    Par défaut
    Jusque là la meilleure solution que j'ai trouvée, c'est de mettre à jour l'affichage automatiquement toutes les 50 millisecondes avec un QTimer, mais il y a ss doute mieux à faire
    De plus le PC risque de s'emballer (comme avec un while(true) ) non ?

  5. #5
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    Citation Envoyé par kwakanar
    Qu'est-ce que tu veux dire par instance unique ?
    le but d'une liste est de contenir plusieurs choses (meme si une liste est une chose en elle même).

    en regardant la doc de QT4 (ce que je n'avais pas fait) je vois que ton signal existe bel et bien

    je suppose que tu fais la chose sous Windows et non Linux, car si le connect n'est pas correct il y a un affichage à l'exécution, et l'affichage etant un printf on ne voit rien sous windows
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 94
    Points : 82
    Points
    82
    Par défaut
    oui mais ou est le problème alors que les signatures du signal et du slot sont les mêmes ?

    de plus, il n'y a pas moyen d'émuler la chose avec un signal venant de l'item lui-même

  7. #7
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    T'as un souci quelque part parce que quand je le fais dans un de mes programmes, ça marche (trop) bien.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 94
    Points : 82
    Points
    82
    Par défaut
    Ben oui mais mon slot est implémenté et fonctionne lorsqu'il est appelé à partir d'un autre signal.

    Le signal itemClicked se déclenche bien si un item de la liste est cliqué c'est ça ?

    Alors où est le problème :

    :
    :

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Oui, c'est ça.
    Perso, j'ai ça : connect(listView, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(TestChanged(QListWidgetItem*)));
    Ca marche, mais c'est la même chose que toi, je crois !
    updateView est bien déclaré comme un slot et tu as bien passé moc par-dessus ton en-tête ?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 94
    Points : 82
    Points
    82
    Par défaut
    Oui c'est un slot (dans la section private slots de ma classe). Voici la déclaration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private slots:
    void updateView ();
    Le moc est passé aussi.

    : : :

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 94
    Points : 82
    Points
    82
    Par défaut
    Réponse partielle due à une petite note discrète dans la doc de Qt : les arguments de types classes posent des problèmes. J'ai réécrit avec des const char* (en remplaçant l'item par son contenu) et ça ne marche toujours pas malgré aucune erreur à la compilation.

    D'autres idées ?

Discussions similaires

  1. Signaux et slots avec Qt4
    Par dourouc05 dans le forum Téléchargez
    Réponses: 0
    Dernier message: 01/11/2010, 22h23
  2. Signaux et slots comme Qt
    Par b Oo dans le forum Qt
    Réponses: 21
    Dernier message: 11/04/2007, 17h57
  3. [Qt4] Signaux et Slot
    Par gentox dans le forum Qt
    Réponses: 9
    Dernier message: 25/01/2007, 18h35

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