QT QGraphicsView Zoom in, Zoom out Issue

877 views Asked by At

My work Environment : Qt 5.8 MSVC2015 64bit, QT GraphicsView, Windows 7 64 bit

I have derived my class as below :

class MainWindow : public QMainWindow
class mySquare : public QGraphicsRectItem
class GraphicsView : public QGraphicsView
class Scene : public QGraphicsScene

I have drawn Sqaure with text inside it. for zoom in & zoom out I have used below code:

void GraphicsView::mouseMoveEvent(QMouseEvent *event)
{
    //temp raise mouse movement signal start
    QPointF movment = mapToScene (event->pos());
    emit sendMousePoint(movment);

    if (_pan) // it get enable when control button is pressed.
    {
        horizontalScrollBar()->setValue(horizontalScrollBar()->value() - (event->x() - _panStartX));
        verticalScrollBar()->setValue(verticalScrollBar()->value() - (event->y() - _panStartY));
        _panStartX = event->x();
        _panStartY = event->y();
        event->accept();
     //   qDebug() <<"Mouse X" << QString::number(event->pos().x()) << " Y:" << QString::number(event->pos().y());
        return;
    }
    //temp raise mouse movement signal end
    event->ignore();
    QGraphicsView::mousePressEvent(event);

}

But when I zoom in & out it goes out of focus & create white blank screen.

Any clue what I am missing in zoom in & out code ?

1

There are 1 answers

0
Sandip On

I have mess up with code of mySquare::paint code.

Here is my fixed code :

void mySquare::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    Q_UNUSED(widget);
    painter->save();
    painter->setPen(Qt::darkBlue);
    painter->setBrush(Qt::NoBrush);
    const qreal lod = option->levelOfDetailFromTransform(painter->worldTransform());

    if((lod>_minlod) && (lod<=_maxlod))
    {

    }
    else
    {
        QRectF rect(0,0,_width,_height);
        painter->drawRect(rect);
        return;
    }

    if((_level==0) && (_row==0) && (_col==0))
    {
        qDebug()<<" Level: "<<_level<<" lod:"<<lod;
    }
    QRectF rect(0,0,_width,_height);
    painter->drawRect(rect);
    QString text1= QString("I am at level : %1 , Row: %2, Col : %3").arg(_level).arg(_row).arg(_col);
    painter->drawText( QRectF(40, 40, _width -20, _height -20),text1);
    painter->restore();