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 :

[Qt 4.7] QDateEdit : un phénomène inexpliqué


Sujet :

Qt

  1. #1
    Invité
    Invité(e)
    Par défaut [Qt 4.7] QDateEdit : un phénomène inexpliqué
    Bonsoir,

    J'ai Qt 4.7 et cela fait environ une semaine que je bataille sur un problème et j'ai réussi à le contourner sans pour autant tout comprendre.

    Laissez-moi vous exposer déjà le décor : donc mon programme dispose d'une dateedit nommée dateEdit et d'un dialog nommé dlgs : le principe est basé sur la sauvegarde.

    J'ai cette fonction "signal et slot" quand la date change (j'ai simplifié le code au maximum) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void MainWindow::on_dateEdit_dateChanged(QString newdate)
    {
    (...)
    if (/*le nom de sauvegarde n'est pas une chaîne de caractères vide*/)
        // alors on sauvegarde le travail avec ce nom avant d'effacer les données
    else // sinon si c'est une chaine vide
        dlgs.exec(); // on ouvre le dialogue de sauvegarde pour sauvegarder les données de l'ancienne date avant d'effacer ces dernières
    // après, une fois le travail sauvegardé (ou non), on efface les données
    (...)
    }
    Au final quand je passe manuellement de Décembre à Novembre 2013 les mois défilent ensuite automatiquement jusqu'à Janvier 2013 (même que ça marque "QDialog::exec() recursive call" : normal puisque qu'il change de date tout seul). De plus les données sont effacées avant même que j'entre et que je valide le nom de sauvegarde (pendant que la dateedit s'affole).

    Alors que moi je lui demande juste de rester à Novembre et pas de changer 50 fois de date tout seul.

    J'ai mis environ 1 semaine à comprendre que c'était soit le dlgs soit la fonction exec() qui "foutaient la merde".

    J'ai réussi à contourner le problème en désactivant la dateedit juste avant de faire exec() puis en la réactivant après (en bref j'utilise la fonction setEnabled() sur ma dateedit).

    J'avais pensé à "retarder la chose" en mettant un petit timer pour contourner la chose.

    Mais peut-être que c'est tout simplement un problème de "modal/non-modal" au niveau du dlgs (plus j'y pense plus j'en suis convaincu).

    Sinon je ne vois pas... Qu'en pensez-vous ?

    Faut-il que je prenne des médocs costauds ? Que je me m'achève à l'absinthe ?
    Dernière modification par Invité ; 10/12/2013 à 09h01.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Ne faites pas une fonction utilisée comme signal ET slot. Cela, je crois, réglera le problème de :
    QDialog::exec() recursive call
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Et non car j'ai essayé avec la fonction QObject::connect() en ayant crée mon propre slot mais cela ne change strictement rien au problème.

    De toute façon il me semble les 2 méthodes sont équivalentes.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Le dlgs, c'est quel type d'objet ? Peut on voir plus de code ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Le dgls est de type QDialog.
    C'est un objet privé appartenant à MainWindow.
    Il est composé d'une QLineEdit nommée save à laquelle j'ai connecté signaux et slots.

    Dans l'entête mainwindow.h elle est déclarée en pointeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QLineEdit *save;
    QDialog dlgs;
    Et dans le fichier mainwindow.cpp dans le constructeur de MainWindow :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    save=new QLineEdit(&dlgs); // je la crée en lui indiquant son parent
    Voilà je ne peux pas faire mieux. De toute façon ça bugge même quand je désactive le code autour en le mettant en commentaire (j'ai épuré le code au maximum pour voir d'où le problème venait et ça vient bien des lignes que j'ai indiquées au 1er post).

    C'est sûrement un problème de fenêtre modale/non-modale non ?

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Pouvez vous donner le code des connect ?
    Peut être que le exec() récursif n'est pas celui de la fonction que vous montrez.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Par contre je ne pense pas que le problème vienne des exec() récursifs (j'ai juste écris ça comme ça).
    D'ailleurs je n'ai plus ce problème quand je désactive et réactive la dateedit. Et je n'appelle aucunement la fonction exec() dans les slots de ma lineedit

    Le problème vient du fait que ma dateedit s'affole dès que je change de date (voir 1er post).

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Je réitère ma question :

    Pouvez vous donner le code des connect ?
    (les connect que vous effectuez.)

    Car le fait de changer une date, envoie un signal, c'est surement lié.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Pardon mais je ne comprends pas la question : le code des connect() ?

  10. #10
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Vous faites des connect dans votre code, montrez les nous, s'il vous plait.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Vous faites des connect dans votre code, montrez les nous, s'il vous plait.
    Vous n'avez pas le droit il vous faut un mandat pour perquisitionner chez moi... Non je plaisante...

    Mdr j'ai bien compris ça mais pouvez-vous être plus précis dans la question svp ?

    Quand vous parler des connect() vous voulez bien dire les connect() de ma lineedit uniquement ?
    Vous voulez aussi le détails des slots qui vont avec je suppose ?

  12. #12
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bah, j'aimerai voir tous les connects que vous utilisez, au moins pour MainWindow et votre histoire de boite de dialogue.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. [Flex/Bison] Erreur syntaxique récurrente et inexpliquée
    Par BiM dans le forum Générateurs de compilateur
    Réponses: 3
    Dernier message: 11/02/2007, 16h37
  2. quand perl s'arrete de manière inexpliquée
    Par stoyak dans le forum Web
    Réponses: 24
    Dernier message: 13/06/2006, 11h09
  3. Réponses: 8
    Dernier message: 19/01/2006, 21h03
  4. PLantage inexpliqué ...
    Par Clad3 dans le forum C++
    Réponses: 4
    Dernier message: 29/09/2005, 13h13
  5. [reseau] Déconnexions inexpliquées
    Par chaval dans le forum Administration
    Réponses: 4
    Dernier message: 24/08/2005, 11h10

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