Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt] vitesse de déplacement d'un QgraphicsItem

    6 juin 2018 à 14:43:05

    Bonjour, j'aimerai modifier la vitesse de déplacement d'un QgraphicsEllipseItem avec un QhrizontalSlider mais après beaucoup de recherche je n'ai pas trouvé grand chose qui correspond à ce que je cherche. Ece que quelqu'un pourrait me guider s'il vous plait? Merci à vous. :)
    • Partager sur Facebook
    • Partager sur Twitter
      6 juin 2018 à 15:24:02

      Salut,

      La vitesse de déplacement d'un élément quelconque détermine la distance qui sépare son point d'origine de son point d'arrivée dans un temps donné.  Un déplacement en 2D s'effectue en effectuant les calculs suivant:

      • sur l'axe des X : la destination se trouve à x origine + (distance sur l'axe des X par unité de temps * temps écoulé)
      • sur l'axe des Y : la destination se trouve à y origine + (distance sur l'axe des Y par unité de temps * temps écoulé)

      Tu dois donc avoir "quelque part" cette information de distance parcourue par unité de temps (pour l'axe des X et pour l'axe des Y) ainsi que la notion de temps écoulé entre deux calculs.

      Pour modifier la vitesse de déplacement au départ d'un slider, tu devra connecter le signal valueChanged a une fonction qui s'occupera de mettre la vitesse de déplacement à jour en effectuant une rapide règle de trois par rapport à la position précédente de ton slider.

      Typiquement, cela pourrait ressembler à quelque chose comme

      class Vitesse : public QWidget{
          Q_OJBECT
      public:
          double x() const{
              return x_;
          }
          double y() const{
              return y_;
          }
          void onValueChanged(int newPos){
              x_ = x_/slidePos_ * static_cast<double>(newPos);
              y_ = y_/slidePos_ * static_cast<double>(newPos);
              slidePos_=newPos;
          }
      private:
          double x_;
          double y_;
          int slidePos_;
      };

      Et pour déterminer la position de ton élément grâce à cette vitesse, le calcul s'effectuera désormais sous une forme proche de

      /* avec delais = temps écoulé entre le dernier calcul
       * et le moment présent
       */
      x = x+(vitesse.x() * delais);
      y = y+(vitesse.y() * delais);
      • Partager sur Facebook
      • Partager sur Twitter
      Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
        14 juin 2018 à 11:40:35

        Bonjour, ece qu'il y a besoin de QTimer pour ça?
        • Partager sur Facebook
        • Partager sur Twitter

        [Qt] vitesse de déplacement d'un QgraphicsItem

        × 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