16,215
社区成员
发帖
与我相关
我的任务
分享
void Drawmap::mouseMoveEvent( QGraphicsSceneMouseEvent *event )
{
event->accept();
if (mymovestate)
{
QGraphicsItemGroup *group = this->createItemGroup(this->selectedItems());
group->setFlags(QGraphicsItem::ItemIsMovable);
}
}
void Myview::mousePressEvent( QMouseEvent * event )
{
if (event->button()==Qt::RightButton)
{
mPos = mapToScene(event->pos());
mymovestate=true;
}
return QGraphicsView::mousePressEvent(event);
}
void Myview::mouseMoveEvent( QMouseEvent * mevent )
{
/*this->scene()->selectedItems();*/
if (mymovestate)
{
//this->setDragMode(QGraphicsView::RubberBandDrag);
QPointF pt = mapToScene ( mevent->pos() );
QPointF offset = pt - mPos;
QPoint viewCenter (this->viewport()->width()/2, this->viewport()->height()/2);
QPointF sceneCenter = mapToScene(viewCenter);
target = sceneCenter - offset;
//this->centerOn(target);
}
return QGraphicsView::mouseMoveEvent(mevent);
}
void Myview::mouseReleaseEvent( QMouseEvent *event )
{
mymovestate=false;
this->translate(target.x()*100000,target.y()*100000); //MinPos: -4780 -27000 MaxPos: 19560 24680
this->update();
return QGraphicsView::mouseReleaseEvent(event);
}
QGraphicsView::translate 验证过 没什么效果;按照正常思路是平移坐标系就可以了;
可取滚动条的平移还是没能实现,这个问题纠结了我很长一段时间了,各路大神 不要沉
代码 思路 赐教哈 谢谢[/quote]
多看看Manual多试试吧,这种平移不应该有什么难度的。[/quote]
恩 ,大佬 我刚测试了下
translate 在绘制函数这个 里面是有效的
void MyItem::paint(QPainter *painter,const QStyleOptionGraphicsItem *option,QWidget *widget)
{
painter.translate(-1000,-1000);
draw my map
}
但在myview类中 translate 就没效了 原点我也是用 maptoscene() 映射 还是没效果 求解 是那环节出问题了呢[/quote]
你把问题考虑的太复杂了,从最简单的地方开始考虑即可。
就如同你拿着放大镜(View)看报纸(Scene),需要看不同的地方时,放大镜不用换,报纸也不用重新印刷[/quote]void Myview::mouseMoveEvent( QMouseEvent * mevent )
{
/*this->scene()->selectedItems();*/
if (mymovestate)
{
//this->setDragMode(QGraphicsView::RubberBandDrag);
QPointF pt = mapToScene ( mevent->pos() );
QPointF offset = pt - mPos;
QPoint viewCenter (this->viewport()->width()/2, this->viewport()->height()/2);
QPointF sceneCenter = mapToScene(viewCenter);
QPointF target = sceneCenter - offset;
this->centerOn(target);
}
return QGraphicsView::mouseMoveEvent(mevent);
}