qt widget窗口中有一个QLabel控件,控件中包含一个非填充的图片,鼠标点击该图片,则mouseEvent pos() position() scenePosition() globalPosition()的区别
时间: 2024-02-13 19:03:30 浏览: 63
在这种情况下,如果鼠标点击了QLabel中的图片,则四个函数返回的坐标值的区别如下:
- pos()函数返回的是相对于QLabel控件的坐标;
- position()函数返回的是相对于图片的坐标,也就是说它返回的坐标相对于QLabel控件的坐标加上图片在QLabel控件中的位置偏移量;
- scenePos()函数返回的是相对于场景的坐标,但是QLabel并没有关联到场景中,所以它返回的坐标并没有实际意义;
- globalPos()函数返回的是相对于屏幕的坐标,也就是说它返回的坐标是绝对坐标。
需要注意的是,在获取globalPos()函数返回的坐标时,需要将pos()函数返回的坐标转换为相对于窗口的坐标,然后再加上窗口的位置偏移量。具体的实现可以参考下面的代码:
```cpp
void QLabel::mousePressEvent(QMouseEvent* event)
{
QPoint pos = event->pos(); // 相对于QLabel的坐标
QPoint globalPos = mapToGlobal(pos); // 相对于屏幕的坐标
QPoint windowPos = parentWidget()->pos(); // 窗口的位置偏移量
QPoint clickedPos = globalPos - windowPos; // 相对于窗口的坐标
// do something with clickedPos
}
```
其中,使用`parentWidget()`函数获取QLabel的父窗口控件,然后通过`pos()`函数获取窗口的位置偏移量,最后将相对于屏幕的坐标转换为相对于窗口的坐标。
阅读全文