在QGraphicsView里面,计算当前鼠标位置距离QGraphicsView左上角的位置
时间: 2023-08-26 10:29:36 浏览: 89
可以使用QGraphicsView的mapToScene()方法将当前鼠标位置转换为场景坐标,然后再使用QGraphicsView的mapFromScene()方法将场景坐标转换为视图坐标,最后再减去视图的偏移量,就可以得到当前鼠标位置距离QGraphicsView左上角的位置。
示例代码如下:
```
QPointF mousePos = mapToScene(event->pos()); // 将当前鼠标位置转换为场景坐标
QPoint viewPos = mapFromScene(mousePos).toPoint(); // 将场景坐标转换为视图坐标
viewPos -= viewport()->geometry().topLeft(); // 减去视图的偏移量
```
其中,event参数是鼠标事件对象。
相关问题
qgraphicsview坐标系
QGraphicsView的坐标系是以左上角为原点,x轴正方向向右,y轴正方向向下。[3] 这意味着视图坐标中的点(0,0)是指视图的左上角。在QGraphicsView中,所有的鼠标事件最开始都是以视图坐标表示。 而QGraphicsScene类的坐标系以中心为原点,即(0,0)点位于场景的中心。 而对于图元来说,它们使用自己的本地坐标系,通常以图元的中心为原点。 总之,QGraphicsView的坐标系是相对于视图本身,而QGraphicsScene和图元的坐标系是相对于场景和图元本身的。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [qt graphics view 坐标系](https://blog.csdn.net/wowocpp/article/details/111909001)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
QGraphicsView* view = new QGraphicsView(this); QGraphicsScene* scene = new QGraphicsScene(this);在.h文件中使用这两个时,左上角会多一个缩略小图
这个缩略图是 QGraphicsView 的默认行为,它显示了场景中的完整视图,并且可以用鼠标拖动来改变视图。如果你不想要这个缩略图,可以通过以下两种方式之一来禁用它:
1. 在创建 QGraphicsView 对象时将 showScrollBars 参数设置为 false:
```
QGraphicsView* view = new QGraphicsView(this);
view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
```
2. 在构造函数中设置 QGraphicsView 的属性:
```
QGraphicsView* view = new QGraphicsView(this);
view->setRenderHint(QPainter::Antialiasing);
view->setInteractive(true);
view->setScene(scene);
view->setDragMode(QGraphicsView::ScrollHandDrag);
view->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
view->setOptimizationFlag(QGraphicsView::DontAdjustForAntialiasing, true);
view->setOptimizationFlag(QGraphicsView::DontSavePainterState, true);
view->setOptimizationFlag(QGraphicsView::DontAdjustSceneRect, true);
view->setOptimizationFlag(QGraphicsView::IndirectPainting, true);
```
阅读全文