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 :

Composant ne se rafraichit pas


Sujet :

Qt

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 93
    Points : 53
    Points
    53
    Par défaut Composant ne se rafraichit pas
    Bonjour,
    Peut-être tout bête ou quelque chose que j'ai mal compris mais j'ai une fonction dans une classe qui appel une fonction d'une autre classe. Cette dernière met à jour un doubleSpinBox mais rien ne change à l'écran.

    Ma première fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void programme::chargement_programme()
    {
        Modification modif;
        modif.lecture_programme(monChemin);
    }
    La deuxième :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void Modification::lecture_programme(QString nom_programme)
    {
        QSettings programme(nom_programme, QSettings::IniFormat);      // Ouverture du fichier INI
     
        ui->doubleSpinBox->setValue(programme.value("OTHERS/variable", 0).toDouble());
    }
    La fenêtre Modification ne se met pas à jour.

    J'ai essayé update(), show(), et d'autre.

    Modification.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
    21
    22
    23
    24
    25
    26
    27
    28
     
    #ifndef MODIFICATION_H
    #define MODIFICATION_H
     
    #include <QDialog>
     
     
    QT_BEGIN_NAMESPACE
    namespace Ui { class Modification; }
    QT_END_NAMESPACE
     
    class Modification : public QDialog
    {
        Q_OBJECT
     
    public:
        Modification(QWidget *parent = nullptr);
        ~Modification();
        void lecture_programme(QString nom_programme);
     
    private slots:
     
     
    private:
        Ui::Modification *ui;
    };
     
    #endif // MODIFICATION_H
    programme.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
    21
    22
    23
    24
    25
    26
    27
     
    #ifndef PROGRAMME_H
    #define PROGRAMME_H
     
     
    #include <QDialog>
     
    namespace Ui {
        class programme;
    }
     
    class programme: public QDialog
    {
        Q_OBJECT
     
    public:
        explicit programme(QWidget *parent = nullptr);
        ~programme();
        void chargement_programme();
     
    private slots:
     
    private:
        Ui::programme*ui;
    };
     
    #endif // PROGRAMME_H

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 902
    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 902
    Points : 219 982
    Points
    219 982
    Billets dans le blog
    126
    Par défaut
    Bonjour,

    Deux pistes :
    • afficher la valeur retournée par programme.value("OTHERS/variable", 0).toDouble() (à l'aide d'un printf/cout ou du debugger ;
    • à quoi ressemble votre main() ?

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 93
    Points : 53
    Points
    53
    Par défaut
    Merci

    La valeur lue dans le fichier ini est la bonne. Quand je l'affiche dans le débuggeur ou avec un point d'arrêt, elle est bonne.
    Je l'avais même enregistré dans une variable qui était lu par ma spinbox a chaque ouverture de la fenêtre. Quand je ferme et rouvre la fenêtre, la valeur est mise a jour.
    Pareil lorsque je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void programme::chargement_programme()
    {
        Modification modif;
        modif.lecture_programme(monChemin);
        modification.exec();
    }
    dans Programme.cpp après avoir appelée la fonction de modif, une fenêtre est créée et la valeur est bonne.

    Mon main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int main(int argc, char *argv[])
    {
        QStyle* fusion = QStyleFactory::create("fusion");
        QApplication::setStyle(fusion);
     
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
        return a.exec();
    }

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 902
    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 902
    Points : 219 982
    Points
    219 982
    Billets dans le blog
    126
    Par défaut
    Là, comme ça, je ne vois pas.
    Les possibilités sont :
    • la valeur est modifiée dans une autre partie du code ;
    • la valeur dépasse les bornes définies pour le spinbox ;
    • il n'y a pas de rafraîchissement, car Qt ne passe pas dans sa boucle d'événements (mais il y a bien les exec()) ;
    • la réponse D...

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 93
    Points : 53
    Points
    53
    Par défaut
    J'ai exclu les deux premières.
    Je pencherai plus sur la 3 ème. Je vais regarder comment fonctionne cette boucle.
    Ou bien la réponse D, c'est mon ultime bafouille !

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 93
    Points : 53
    Points
    53
    Par défaut
    J'ai fais des tests.
    J'ai l'impression que les valeurs se mettent bien à jour tant que je n'ai pas lancé programme.exec();
    Comme ci, tant que exec est sur ma fenêtre Modification, pas de soucis mais dès que je passe sur programme, les valeurs ne se mettent plus à jour, même si je ferme programme.
    Il faut de nouveau que je fasse un exec sur Modification. Mais cela m'ouvre une deuxième fenêtre.

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 93
    Points : 53
    Points
    53
    Par défaut
    J'ai contourné mon problème en appelant ma fonction qui modifie ma double spinbox dans Modification.cpp dans laquelle se trouve la form de la spinbox, au lieu d'appeler cette fonction dans programme.
    Je ne comprends juste pas pourquoi appeler une fonction qui se trouve dans Modification.cpp et qui comporte cette ligne unique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ui->doubleSpinBox->setValue("5.4");
    met bien à jour la spinBox quand la fonction est appelée dans Modification.cpp mais pas quand je l'appel dans d'autre classe, comme programme.cpp

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 902
    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 902
    Points : 219 982
    Points
    219 982
    Billets dans le blog
    126
    Par défaut
    Sans le projet complet, cela sera dur à dire. Changer l'endroit où est écrite une ligne, signifie (potentiellement) changer à quel moment cette ligne est exécutée dans la vie du programme (sachant que vous avez une interface graphique avec des threads et une boucle événementielle).

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

Discussions similaires

  1. [ADO] Error 429: Un composant activex ne peut pas créer un objet
    Par Pierre Fauconnier dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 10/05/2006, 06h09
  2. [D5] Composants RX : ca marche pas (rlink32)
    Par Oluha dans le forum Composants VCL
    Réponses: 15
    Dernier message: 11/04/2006, 15h06
  3. La Palette des composants ne s'affiche pas
    Par mouna201 dans le forum JBuilder
    Réponses: 1
    Dernier message: 02/02/2006, 15h27
  4. [VS2003] Un composant ActiveX ne peut pas créer un objet
    Par kendras dans le forum Framework .NET
    Réponses: 1
    Dernier message: 28/12/2005, 12h39
  5. JApplet avec J-Composants : compos. n'apparaissent pas
    Par gletare dans le forum Applets
    Réponses: 3
    Dernier message: 12/12/2005, 17h05

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