Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt] modifiedWindow

Anonyme
    3 juin 2008 à 16:59:19

    Bonjour :) .

    Une fois de plus, j'ai besoin d'un peu d'aide.

    Toujours dans le cadre de la réalisation d'un éditeur de texte basique, je souhaitais, comme par exemple sous C::B, signaler un fichier modifié par une astérisque dans le titre de ce fichier.
    En regardant la doc de Qt, je me suis rendu compte qu'il existait pour tous les QWidget la propriété windowModified qui indique si le QWidget est modifié ou pas.

    Or, toujours d'après cette doc, il suffit de mettre [*] dans le titre du QWidget pour que l'astérisque s'affiche ou ne s'affiche pas selon que le QWidget est modifié ou pas.
    Malheureusement, chez moi ça ne fonctionne pas :( . Dans le titre, quelque soit l'état du QWidget, il y a toujours [*]...

    J'ai fait plusieurs tests : la propriété windowModified a la bonne valeur quand il le faut, mais rien n'y fait : le titre ne bouge pas.

    Donc voilà, avez-vous déjà eu un problème similaire, ou connaissez-vous-en la solution ?
    Si vous voulez du code, demandez !

    Merci d'avance :) .
    • Partager sur Facebook
    • Partager sur Twitter
      3 juin 2008 à 17:11:34

      donc il faudrais le code pour voir comment tu modifie le texte du titre de l'onglet?
      • Partager sur Facebook
      • Partager sur Twitter
      :)
        3 juin 2008 à 17:49:13

        Pour moi, je procède différemment :

        QTextEdit a un signal, textChanged(). je connecte le signal à un slot perso pour afficher ou non un * (dépendamment de ce que donne la méthode isModified() d'un QTextEdit).

        Lorsque je sauvegarde, je fait setModified(false) au QTextEdit en question.
        • Partager sur Facebook
        • Partager sur Twitter
        Altarapp.com - Applications, Code Snippets, API Wrappers et etc, le tout en C# le plus clair du temps!
          3 juin 2008 à 18:00:39

          regarde l'exemple SDI c'est bien marqué comment faut faire :
          void MainWindow::documentWasModified()
          {
              setWindowModified(true);
          }
          
          void MainWindow::init()
          {
              //...
              connect(textEdit->document(), SIGNAL(contentsChanged()),
                      this, SLOT(documentWasModified()));
          }
          
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            3 juin 2008 à 19:20:24

            @minirop : en effet, j'ai bien fait de la même manière que l'exemple de Qt en SDI, mais visiblement ça n'a pas fonctionné comme il faudrait :( .

            @shadosan : si ça ne marche vraiment pas, je procèderai ainsi effectivement, mais je préfère autant utiliser les fonctionnalités fournies par Qt, qui permettent au visuel du programme de s'adapter à n'importe quel environnement.

            Bon, voilà mon code, avec tout ce qui concerne le titre et une modification :

            FileSubWindow::FileSubWindow()
            {
                // ...
            
                setFileName("");
            
                connect(textZone->document(), SIGNAL(contentsChanged()), this, SLOT(documentWasModified()));
            }
            
            void FileSubWindow::documentWasModified()
            {
                setWindowModified(textZone->document()->isModified());
            }
            
            void FileSubWindow::setFileName(const QString& name)
            {
                fileName = name;
                textZone->document()->setModified(false);
                setWindowModified(false);
            
                QString title;
            
                if(fileName.isEmpty())
                {
                    title = "(Sans titre)";
                }
                else
                {
                    title = QFileInfo(fileName).fileName();
                }
            
                setWindowTitle(tr("%1[*]").arg(title));
            }
            


            (vous noterez qu'il y a pas mal de code pompé de l'exemple, mais bon, après tout, l'exemple est codé si proprement que c'est difficile de faire autre chose après l'avoir lu ^^ )

            Merci à vous trois en tout cas ;) .

            EDIT : y a du nouveau !

            En fait, sans faire exprès, j'ai minimisé mon onglet (oui, j'affiche les sous-fenêtres de ma QMdiArea sous forme d'onglets) et le titre de la fenêtre ainsi minimisée colle bien à ce qu'il faudrait avoir !
            Bref, le problème vient d'une mauvaise implantation de QMdiArea je suppose, vu que ce widget est encore tout récent...
            J'attends quand même encore un jour avant de marquer comme "résolu", peut-être que quelqu'un sait tout de même quelque chose de plus ^^ .
            • Partager sur Facebook
            • Partager sur Twitter
              3 juin 2008 à 20:43:48

              Pourrais-tu mettre le code fonctionnel à la fin? Quand tu seras sur?
              Merci ;)
              • Partager sur Facebook
              • Partager sur Twitter
              :)
              Anonyme
                3 juin 2008 à 20:59:43

                Le code fonctionnel à la fin, si personne n'a une autre solution, sera celui proposé par shadosan : modification manuelle du titre.

                Mais bon, j'ose espérer que dans une prochaine version de Qt, le problème sera réglé et qu'il n'y aura plus besoin de bricoler ^^ .

                (D'ailleurs, si quelqu'un se sent l'envie et l'anglais de signaler le bug, libre à lui :-° .)
                • Partager sur Facebook
                • Partager sur Twitter
                  3 juin 2008 à 22:48:29

                  Cyprien_ > pourquoi ça serait un bug ? l'exemple compile et fonctionne parfaitement donc l'erreur doit se trouver dans ton code.

                  par exemple mets un .zip à télécharger histoire qu'on puisse bidouiller.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    4 juin 2008 à 7:47:00

                    Sauf que l'exemple n'utilise pas d'onglets ^^ .

                    Bon, je vous envoie un .zip (désolé, c'est hébergé par MegaUpload...) :

                    .zip | 5.15Mo
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      4 juin 2008 à 17:37:09

                      Merci à toi, si vous le souhaitez, le même sur www.uploading.com :D :

                      .zip | 2.15Mo
                      • Partager sur Facebook
                      • Partager sur Twitter

                      [Qt] modifiedWindow

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown