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. Items in QGraphicsScene are not movable
Forum Updated to NodeBB v4.3 + New Features

Items in QGraphicsScene are not movable

Scheduled Pinned Locked Moved Solved General and Desktop
23 Posts 4 Posters 9.5k Views 3 Watching
  • 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.
  • faiszalkhanF faiszalkhan

    @sanojsubran I tried that but it results in a compilation error.

    mrjjM Offline
    mrjjM Offline
    mrjj
    Lifetime Qt Champion
    wrote on last edited by
    #8

    @faiszalkhan
    Hi
    Can you list that error ?
    Since its the base class that do the actual moving,
    its critical to call it so lets find out what was wrong ?

    faiszalkhanF 1 Reply Last reply
    1
    • mrjjM mrjj

      @faiszalkhan
      Hi
      Can you list that error ?
      Since its the base class that do the actual moving,
      its critical to call it so lets find out what was wrong ?

      faiszalkhanF Offline
      faiszalkhanF Offline
      faiszalkhan
      wrote on last edited by faiszalkhan
      #9

      @mrjj @sanojsubran It was my bad. The solution worked. However I'm not very sure as to what we did there :(

      1 Reply Last reply
      0
      • faiszalkhanF Offline
        faiszalkhanF Offline
        faiszalkhan
        wrote on last edited by faiszalkhan
        #10

        The problem is not completely solved. StateItem is a custom graphics item which inherits QGraphicsItem.
        The constructor of StateItem is as shown below,

        StateItem::StateItem(QPointF pos)
        {
        /* Get the position from the caller */
        drawPos = new QPointF(pos.x(), pos.y());

        //TODO: Set item as movable
        setFlags(QGraphicsItem::ItemIsMovable);

        }

        This graphics Item is displayed on the scene but still is not movable.

        Please help!
        Thanks!

        1 Reply Last reply
        0
        • SGaistS Offline
          SGaistS Offline
          SGaist
          Lifetime Qt Champion
          wrote on last edited by
          #11

          Hi,

          Your original problem was that by not calling the base class method implementation, you don't get the behaviour from the base class.

          Interested in AI ? www.idiap.ch
          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

          1 Reply Last reply
          2
          • faiszalkhanF Offline
            faiszalkhanF Offline
            faiszalkhan
            wrote on last edited by
            #12

            Since I am inheriting the QGraphicsItem in StateItem to create custom shape. Am I missing out something for setFlags(QGraphicsItem::ItemIsMovable); in the constructor to not work ?

            Thanks

            1 Reply Last reply
            0
            • mrjjM Offline
              mrjjM Offline
              mrjj
              Lifetime Qt Champion
              wrote on last edited by
              #13

              Hi
              You might need
              setFlag(QGraphicsItem::ItemIsMovable);
              setFlag(QGraphicsItem::ItemIsSelectable);

              If we look at
              http://doc.qt.io/qt-5/qtwidgets-graphicsview-diagramscene-example.html

              It all it does to flag the items.

              faiszalkhanF 1 Reply Last reply
              1
              • mrjjM mrjj

                Hi
                You might need
                setFlag(QGraphicsItem::ItemIsMovable);
                setFlag(QGraphicsItem::ItemIsSelectable);

                If we look at
                http://doc.qt.io/qt-5/qtwidgets-graphicsview-diagramscene-example.html

                It all it does to flag the items.

                faiszalkhanF Offline
                faiszalkhanF Offline
                faiszalkhan
                wrote on last edited by
                #14

                @mrjj said in Items in QGraphicsScene are not movable:

                setFlag(QGraphicsItem::ItemIsMovable);
                setFlag(QGraphicsItem::ItemIsSelectable);

                Hi @mrjj , tried the same but still not working.

                1 Reply Last reply
                0
                • mrjjM Offline
                  mrjjM Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on last edited by
                  #15

                  Ok. cant tell what is wrong then.
                  You might have overridden a virtual and forgot to call base class.

                  Have a look at the diagram sample and see if can spot anything you
                  did different.

                  Or try the StateItem in a default scene/view.

                  faiszalkhanF 1 Reply Last reply
                  0
                  • mrjjM mrjj

                    Ok. cant tell what is wrong then.
                    You might have overridden a virtual and forgot to call base class.

                    Have a look at the diagram sample and see if can spot anything you
                    did different.

                    Or try the StateItem in a default scene/view.

                    faiszalkhanF Offline
                    faiszalkhanF Offline
                    faiszalkhan
                    wrote on last edited by
                    #16

                    @mrjj I just have the constructor, paint function and bounding rect. The file is as follows,

                    StateItem::StateItem(QPointF pos)
                    {

                    /* Get the position from the caller */
                    drawPos = new QPointF(pos.x(), pos.y());
                    
                    //TODO: Set item as movable
                    

                    // setFlags(QGraphicsItem::ItemIsFocusable);
                    // setFlags(QGraphicsItem::ItemIsSelectable);
                    setFlags(QGraphicsItem::ItemIsMovable);

                    // QGraphicsItem::QGraphicsItem();
                    }

                    QRectF StateItem::boundingRect() const
                    {
                    //TODO: Return a rectangle of calculated size
                    qreal penWidth = 1;
                    return QRectF(-10 - penWidth / 2, -10 - penWidth / 2,
                    20 + penWidth, 20 + penWidth);

                    }

                    /* Explicit call to this function is not required */
                    void StateItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget widget)
                    {
                    /
                    Set the pen */
                    QPen blackpen(Qt::black);
                    blackpen.setWidth(2);
                    painter->setPen(blackpen);

                    /* Set colour of the state */
                    QColor statecolor(229,231,233);
                    QBrush statebrush(statecolor);
                    painter->setBrush(statebrush);
                    
                    /* Draw state item */
                    painter->drawRoundedRect(drawPos->x(),drawPos->y(),100,50,8,8); //x,y,width,height,xradius,yradius
                    
                    QPoint p(drawPos->x(),(drawPos->y() + 10));
                    QPoint q((drawPos->x() + 100), (drawPos->y() + 10));
                    QLine stateLine(p,q);
                    painter->drawLine(stateLine);
                    

                    // QGraphicsItem::paint(painter,option,widget);

                    }

                    1 Reply Last reply
                    0
                    • mrjjM Offline
                      mrjjM Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on last edited by
                      #17

                      Hi
                      Dont it need to be selectable to be moveable ?
                      It all seems fine
                      try use the DiagramTextItem from the diagram sample (its available directly in Creator)

                      If that cant move, it means its your view or scene.

                      //! [0]
                      DiagramTextItem::DiagramTextItem(QGraphicsItem *parent)
                          : QGraphicsTextItem(parent)
                      {
                          setFlag(QGraphicsItem::ItemIsMovable); // BOTH 
                          setFlag(QGraphicsItem::ItemIsSelectable);
                      }
                      //! [0]
                      
                      //! [1]
                      QVariant DiagramTextItem::itemChange(GraphicsItemChange change,
                                           const QVariant &value)
                      {
                          if (change == QGraphicsItem::ItemSelectedHasChanged)
                              emit selectedChange(this);
                          return value;
                      }
                      //! [1]
                      
                      //! [2]
                      void DiagramTextItem::focusOutEvent(QFocusEvent *event)
                      {
                          setTextInteractionFlags(Qt::NoTextInteraction);
                          emit lostFocus(this);
                          QGraphicsTextItem::focusOutEvent(event);
                      }
                      //! [2]
                      
                      //! [5]
                      void DiagramTextItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
                      {
                          if (textInteractionFlags() == Qt::NoTextInteraction)
                              setTextInteractionFlags(Qt::TextEditorInteraction);
                          QGraphicsTextItem::mouseDoubleClickEvent(event);
                      }
                      
                      faiszalkhanF 1 Reply Last reply
                      0
                      • mrjjM mrjj

                        Hi
                        Dont it need to be selectable to be moveable ?
                        It all seems fine
                        try use the DiagramTextItem from the diagram sample (its available directly in Creator)

                        If that cant move, it means its your view or scene.

                        //! [0]
                        DiagramTextItem::DiagramTextItem(QGraphicsItem *parent)
                            : QGraphicsTextItem(parent)
                        {
                            setFlag(QGraphicsItem::ItemIsMovable); // BOTH 
                            setFlag(QGraphicsItem::ItemIsSelectable);
                        }
                        //! [0]
                        
                        //! [1]
                        QVariant DiagramTextItem::itemChange(GraphicsItemChange change,
                                             const QVariant &value)
                        {
                            if (change == QGraphicsItem::ItemSelectedHasChanged)
                                emit selectedChange(this);
                            return value;
                        }
                        //! [1]
                        
                        //! [2]
                        void DiagramTextItem::focusOutEvent(QFocusEvent *event)
                        {
                            setTextInteractionFlags(Qt::NoTextInteraction);
                            emit lostFocus(this);
                            QGraphicsTextItem::focusOutEvent(event);
                        }
                        //! [2]
                        
                        //! [5]
                        void DiagramTextItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
                        {
                            if (textInteractionFlags() == Qt::NoTextInteraction)
                                setTextInteractionFlags(Qt::TextEditorInteraction);
                            QGraphicsTextItem::mouseDoubleClickEvent(event);
                        }
                        
                        faiszalkhanF Offline
                        faiszalkhanF Offline
                        faiszalkhan
                        wrote on last edited by
                        #18

                        @mrjj Dont it need to be selectable to be moveable ?

                        No, Only setting it as moveable also works. I have standard QGraphicsRectItem and QGraphicsEllipseItem also in the same scene which are moving. So I don't think its the view or the scene.

                        :'(

                        mrjjM 1 Reply Last reply
                        0
                        • faiszalkhanF faiszalkhan

                          @mrjj Dont it need to be selectable to be moveable ?

                          No, Only setting it as moveable also works. I have standard QGraphicsRectItem and QGraphicsEllipseItem also in the same scene which are moving. So I don't think its the view or the scene.

                          :'(

                          mrjjM Offline
                          mrjjM Offline
                          mrjj
                          Lifetime Qt Champion
                          wrote on last edited by
                          #19

                          @faiszalkhan
                          Ok, there is something i dont see then. :)
                          if you provide both StateItem.h and cpp
                          i can try run it and see.

                          faiszalkhanF 1 Reply Last reply
                          0
                          • sanojsubranS Offline
                            sanojsubranS Offline
                            sanojsubran
                            wrote on last edited by
                            #20

                            Hi,

                            Comment your overriden paint method for StateItem and check whether it is working.

                            Also please tell how you are updating the variable "drawPos".

                            Regards,
                            San

                            1 Reply Last reply
                            0
                            • mrjjM mrjj

                              @faiszalkhan
                              Ok, there is something i dont see then. :)
                              if you provide both StateItem.h and cpp
                              i can try run it and see.

                              faiszalkhanF Offline
                              faiszalkhanF Offline
                              faiszalkhan
                              wrote on last edited by faiszalkhan
                              #21
                              This post is deleted!
                              1 Reply Last reply
                              0
                              • faiszalkhanF Offline
                                faiszalkhanF Offline
                                faiszalkhan
                                wrote on last edited by
                                #22
                                This post is deleted!
                                1 Reply Last reply
                                0
                                • faiszalkhanF Offline
                                  faiszalkhanF Offline
                                  faiszalkhan
                                  wrote on last edited by
                                  #23

                                  I had previously given a static bounding rect value as the previous implementation was static. Now that the value is dynamic I had not changed the contents of the bounding rect as the size has not changed from the previous implementation.

                                  Making the changes in the bounding rect solved the problem.

                                  Thanks a lot to @mrjj @sanojsubran @SGaist !

                                  1 Reply Last reply
                                  1

                                  • Login

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