QT QGraphicsView Увеличить, Уменьшить Проблема
Моя рабочая среда: Qt 5.8 MSVC2015 64 бит, QT GraphicsView, Windows 7 64 бит
Я вывел свой класс, как показано ниже:
class MainWindow : public QMainWindow
class mySquare : public QGraphicsRectItem
class GraphicsView : public QGraphicsView
class Scene : public QGraphicsScene
Я нарисовал Sqaure с текстом внутри. для увеличения и уменьшения я использовал ниже код:
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);
}
Но когда я увеличиваю и уменьшаю изображение, оно выходит из фокуса и создает белый пустой экран.
Любая подсказка, что мне не хватает в увеличении и уменьшении кода?
1 ответ
Я запутался с кодом mySquare::paint 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();