Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Want to implement rectangle movements similar to in microsoft power point in my QGraphicsView
QtWS25 Last Chance

Want to implement rectangle movements similar to in microsoft power point in my QGraphicsView

Scheduled Pinned Locked Moved Unsolved General and Desktop
22 Posts 4 Posters 5.4k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Q Offline
    Q Offline
    Qt Enthusiast
    wrote on last edited by
    #1

    Hi All
    I have a QgraphicsView and I have rectangles drawn inside the same

    There is functionality in microsoft power point where When I press up key or down key , the right key or letf key the rectangular box moves

    UP : vertically up on the Y axis
    Down : vertically down on the Y axis
    Right : right movement on right key press
    Left : left movement on left key press

    I want to implement the same functionality in my QGraphicsView any suggestions would help

    jsulmJ 1 Reply Last reply
    0
    • Q Qt Enthusiast

      Hi All
      I have a QgraphicsView and I have rectangles drawn inside the same

      There is functionality in microsoft power point where When I press up key or down key , the right key or letf key the rectangular box moves

      UP : vertically up on the Y axis
      Down : vertically down on the Y axis
      Right : right movement on right key press
      Left : left movement on left key press

      I want to implement the same functionality in my QGraphicsView any suggestions would help

      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #2

      @Qt-Enthusiast You can use http://doc.qt.io/qt-5/qgraphicsview.html#mousePressEvent to select a rectangle.
      Then use http://doc.qt.io/qt-5/qgraphicsview.html#keyPressEvent to move the selected rectangle.

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      1
      • Q Offline
        Q Offline
        Qt Enthusiast
        wrote on last edited by Qt Enthusiast
        #3

        First I select the rectangle and then the rectangle should move up when I use up arrow key

        jsulmJ 2 Replies Last reply
        0
        • Q Qt Enthusiast

          First I select the rectangle and then the rectangle should move up when I use up arrow key

          jsulmJ Offline
          jsulmJ Offline
          jsulm
          Lifetime Qt Champion
          wrote on last edited by jsulm
          #4

          @Qt-Enthusiast Why do you want to move mouse up? You want to move rectangle, not mouse cursor, right?
          You use mousePressEvent to select a rectangle, not to move it. I mean, how do you decide which rectangle to move? I guess your user has to click on the rectangle to select it and then move?

          https://forum.qt.io/topic/113070/qt-code-of-conduct

          1 Reply Last reply
          0
          • Q Qt Enthusiast

            First I select the rectangle and then the rectangle should move up when I use up arrow key

            jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on last edited by
            #5

            @Qt-Enthusiast What is "mouse up arrow key"?

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            Q 1 Reply Last reply
            0
            • jsulmJ jsulm

              @Qt-Enthusiast What is "mouse up arrow key"?

              Q Offline
              Q Offline
              Qt Enthusiast
              wrote on last edited by
              #6

              @jsulm I hav e edited the text

              jsulmJ 1 Reply Last reply
              0
              • Q Qt Enthusiast

                @jsulm I hav e edited the text

                jsulmJ Offline
                jsulmJ Offline
                jsulm
                Lifetime Qt Champion
                wrote on last edited by
                #7

                @Qt-Enthusiast Just use http://doc.qt.io/qt-5/qgraphicsview.html#keyPressEvent

                https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                0
                • Q Offline
                  Q Offline
                  Qt Enthusiast
                  wrote on last edited by
                  #8

                  could you guide a little bit more .on Keypress event what should I do so that rectangle moves up on pressing SHift+ arrow key

                  J.HilkJ D 2 Replies Last reply
                  0
                  • Q Qt Enthusiast

                    could you guide a little bit more .on Keypress event what should I do so that rectangle moves up on pressing SHift+ arrow key

                    J.HilkJ Offline
                    J.HilkJ Offline
                    J.Hilk
                    Moderators
                    wrote on last edited by
                    #9

                    @Qt-Enthusiast

                    you overwrite the function, in your QGraphicsView header

                    //xxx.h
                    protected:
                    void keyPressEvent(QKeyEvent *event);
                    

                    than you handle the event in your cpp file

                    keyPressEvent(QKeyEvent *event){
                        if( event->key == Qt::Key_Left){
                         do stuff...
                       }
                    }
                    

                    Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                    Q: What's that?
                    A: It's blue light.
                    Q: What does it do?
                    A: It turns blue.

                    1 Reply Last reply
                    1
                    • Q Qt Enthusiast

                      could you guide a little bit more .on Keypress event what should I do so that rectangle moves up on pressing SHift+ arrow key

                      D Offline
                      D Offline
                      Devopia53
                      wrote on last edited by Devopia53
                      #10

                      @Qt-Enthusiast

                      If you want another way, do the following:

                      [...]
                      #include <QGraphicsRectItem>
                      
                      class MyRectItem : public QGraphicsRectItem
                      {
                      public:
                          explicit MyRectItem(QGraphicsItem *parent = 0);
                      
                          // QGraphicsItem interface
                      protected:
                          virtual void keyPressEvent(QKeyEvent *event) override;
                      };
                      
                      [...]
                      
                      void MyRectItem::keyPressEvent(QKeyEvent *event)
                      {
                          if (!flags().testFlag(QGraphicsItem::ItemIsMovable))
                              return;
                      
                          if (!isSelected())
                              return;
                      
                          switch (event->key()) {
                              case Qt::Key_Left:  moveBy(-1, 0);  break;
                              case Qt::Key_Right: moveBy(1, 0);   break;
                              case Qt::Key_Up:    moveBy(0, -1);  break;
                              case Qt::Key_Down:  moveBy(0, 1);   break;
                          }
                      }
                      
                      [...]
                      auto    item = new MyRectItem;
                      item->setRect(QRectF(-100, -100, 100, 100));
                      item->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable);
                      graphicsView->scene()->addItem(item);
                      [...]
                      
                      
                      Q 1 Reply Last reply
                      3
                      • Q Offline
                        Q Offline
                        Qt Enthusiast
                        wrote on last edited by
                        #11

                        In this I am not sure how to edit the locaation of existing rectangle. are you saying you are removing the previous rectangle

                        1 Reply Last reply
                        0
                        • D Devopia53

                          @Qt-Enthusiast

                          If you want another way, do the following:

                          [...]
                          #include <QGraphicsRectItem>
                          
                          class MyRectItem : public QGraphicsRectItem
                          {
                          public:
                              explicit MyRectItem(QGraphicsItem *parent = 0);
                          
                              // QGraphicsItem interface
                          protected:
                              virtual void keyPressEvent(QKeyEvent *event) override;
                          };
                          
                          [...]
                          
                          void MyRectItem::keyPressEvent(QKeyEvent *event)
                          {
                              if (!flags().testFlag(QGraphicsItem::ItemIsMovable))
                                  return;
                          
                              if (!isSelected())
                                  return;
                          
                              switch (event->key()) {
                                  case Qt::Key_Left:  moveBy(-1, 0);  break;
                                  case Qt::Key_Right: moveBy(1, 0);   break;
                                  case Qt::Key_Up:    moveBy(0, -1);  break;
                                  case Qt::Key_Down:  moveBy(0, 1);   break;
                              }
                          }
                          
                          [...]
                          auto    item = new MyRectItem;
                          item->setRect(QRectF(-100, -100, 100, 100));
                          item->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable);
                          graphicsView->scene()->addItem(item);
                          [...]
                          
                          
                          Q Offline
                          Q Offline
                          Qt Enthusiast
                          wrote on last edited by
                          #12

                          @Devopia53 In this I am not sure how to edit the locaation of existing rectangle. are you saying you are removing the previous rectangle

                          reply

                          J.HilkJ 1 Reply Last reply
                          0
                          • Q Qt Enthusiast

                            @Devopia53 In this I am not sure how to edit the locaation of existing rectangle. are you saying you are removing the previous rectangle

                            reply

                            J.HilkJ Offline
                            J.HilkJ Offline
                            J.Hilk
                            Moderators
                            wrote on last edited by J.Hilk
                            #13

                            @Qt-Enthusiast
                            @Devopia53 pretty much wrote it out for you. Instead of the default QGraphicsItem you use the custom class MyRectItem he defined for you.

                            the last section between the 2 [...] even show you how to add a MyRectItem to your graphicsView.

                            Not much else can be done here


                            Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                            Q: What's that?
                            A: It's blue light.
                            Q: What does it do?
                            A: It turns blue.

                            1 Reply Last reply
                            1
                            • Q Offline
                              Q Offline
                              Qt Enthusiast
                              wrote on last edited by
                              #14

                              One more question If I have pressed Shift + Up key what should be value of event->key()

                              J.HilkJ 1 Reply Last reply
                              0
                              • Q Qt Enthusiast

                                One more question If I have pressed Shift + Up key what should be value of event->key()

                                J.HilkJ Offline
                                J.HilkJ Offline
                                J.Hilk
                                Moderators
                                wrote on last edited by
                                #15

                                @Qt-Enthusiast

                                Key Press event don't come simultaneously, so reimplement KeyReleaseEvent as well, to check if a shift key was pressed and relesed or is still pressed and adjust your KeyPress event accordingly


                                Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                                Q: What's that?
                                A: It's blue light.
                                Q: What does it do?
                                A: It turns blue.

                                1 Reply Last reply
                                0
                                • Q Offline
                                  Q Offline
                                  Qt Enthusiast
                                  wrote on last edited by
                                  #16

                                  A small code will be helpful again

                                  J.HilkJ 1 Reply Last reply
                                  0
                                  • Q Qt Enthusiast

                                    A small code will be helpful again

                                    J.HilkJ Offline
                                    J.HilkJ Offline
                                    J.Hilk
                                    Moderators
                                    wrote on last edited by
                                    #17

                                    @Qt-Enthusiast

                                    //MyRectItem .h
                                    private:
                                    bool bShiftPressed = false;
                                    
                                    protected:
                                        virtual void keyReleaseEvent(QKeyEvent *event) override;
                                    
                                    
                                    //MyRectItem .cpp
                                    
                                    void MyRectItem::keyPressEvent(QKeyEvent *event)
                                    {
                                        if (!flags().testFlag(QGraphicsItem::ItemIsMovable))
                                            return;
                                    
                                        if (!isSelected())
                                            return;
                                    
                                    if(!bShiftPressed)
                                        switch (event->key()) {
                                            case Qt::Key_Left:  moveBy(-1, 0);  break;
                                            case Qt::Key_Right: moveBy(1, 0);   break;
                                            case Qt::Key_Up:    moveBy(0, -1);  break;
                                            case Qt::Key_Down:  moveBy(0, 1);   break;
                                            case Qt::Key_Shift: bShiftPressed = true;
                                        }
                                    else
                                        switch (event->key()) {
                                            case Qt::Key_Left:  moveBy(-10, 0);  break;
                                            case Qt::Key_Right: moveBy(10, 0);   break;
                                            case Qt::Key_Up:    moveBy(0, -10);  break;
                                            case Qt::Key_Down:  moveBy(0, 10);   break;
                                        }
                                    }
                                    
                                    void MyRectItem::keyReleaseEvent(QKeyEvent *event){
                                       if(event->key() == Qt::Key_Shift)
                                           bShiftPressed =false;
                                    }
                                    

                                    Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                                    Q: What's that?
                                    A: It's blue light.
                                    Q: What does it do?
                                    A: It turns blue.

                                    1 Reply Last reply
                                    1
                                    • Q Offline
                                      Q Offline
                                      Qt Enthusiast
                                      wrote on last edited by
                                      #18

                                      I this case up and down arrow key are associated with scrollbar movment . If there is scrollbar movement , then these macros does =move but scrollbar is still moveBy works

                                      Any suggestions on how to avoid this issue

                                      jsulmJ 1 Reply Last reply
                                      0
                                      • Q Qt Enthusiast

                                        I this case up and down arrow key are associated with scrollbar movment . If there is scrollbar movement , then these macros does =move but scrollbar is still moveBy works

                                        Any suggestions on how to avoid this issue

                                        jsulmJ Offline
                                        jsulmJ Offline
                                        jsulm
                                        Lifetime Qt Champion
                                        wrote on last edited by
                                        #19

                                        @Qt-Enthusiast said in Want to implement rectangle movements similar to in microsoft power point in my QGraphicsView:

                                        I this case up and down arrow key are associated with scrollbar movment . If there is scrollbar movement , then these macros does =move but scrollbar is still moveBy works

                                        Could you please rephrase this? I really cannot understand what you mean.

                                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                                        1 Reply Last reply
                                        0
                                        • Q Offline
                                          Q Offline
                                          Qt Enthusiast
                                          wrote on last edited by
                                          #20

                                          In my case the UP key moves the scrollbar up ,

                                          but with Shift+Up key with the code you suggested the Shift+key moves the scroll bar up not the object

                                          in this action on Up takes precedence on action on other key . COuld you let me know what should be done

                                          1 Reply Last reply
                                          0

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved