How to connect two QGraphicsViews (creating a minimap)



  • Hello Qt Forum, I have a big QGraphicsView in the middle and a small QGraphicsView(minimap) at the top both sharing a QGraphicsScene together. Now I want to visualize where the user is looking in the big map by drawing a red rectangle (the area the user see's in the big view) in the small view, similiar to most strategy games. I want to click on the minimap and the big view jumps to the position which is clicked in the minimap.

    I need some kind of mapping the coordinates and set the position of the big view when the minimap is clicked, but i have no clue how to do this at the moment ( I also have no clue how to draw the red rectangle in the minimap).
    Here is my attempt, which is obviously not working...
    @
    //scale the minimap according to the big view
    void MinimapGraphicsView::scaleToMap(QRectF rect)
    {
    //rect is the size of the big view
    resetTransform();
    scaleX=200/rect.width();
    scaleY=200/rect.height();
    scale(scaleX,scaleY);
    setSceneRect(0,0,0,0);
    }

    // if the minimap is clicked, jump to the position...
    void MinimapGraphicsView::mousePressEvent( QMouseEvent* ev )
    {
    QGraphicsView::mousePressEvent(ev);
    if(m_otherView)
    {
    m_otherView->JumpToPosition(ev->pos().x(),ev->pos().y());
    }
    }

    //gets called from the minimap when it is clicked..
    void TileGraphicsView::JumpToPosition(int x,int y)
    {
    QRectF old=sceneRect();
    setSceneRect(x,y,old.width(),old.height());
    }@

    Thank you for your help!



  • Ok, i just found the QGraphicsView::centerOn() function. This works for now..but then, the rectangle problem is still there. I want to show a red rectangle in the minimap, but not in the big view. This seems impossible because those two views share the same scene...does anyone see a way how to do this?



  • Can you subclass QGraphicsView, and implement the paintEvent in such a way that you first call the paintEvent of QGraphicsView, then paint the rectangle on top of it?



  • Hi Amazonasmann,
    I meet the same requirement and I am courious if you managed to create that rectangle. :)


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.