在主界面里面,计算QGraphicsView控件距离主界面左上角的位置
时间: 2024-02-28 07:06:16 浏览: 95
要计算QGraphicsView控件距离主界面左上角的位置,可以使用以下代码:
```python
view_pos = graphicsView.mapTo(self, QPoint(0, 0))
```
其中,`graphicsView`是QGraphicsView控件的对象名,`self`是主界面的对象名。`mapTo()`函数将QGraphicsView控件中的坐标`(0,0)`映射到主界面中,返回的是QPoint对象,即QGraphicsView控件在主界面中的位置。
如果需要获取具体的x、y坐标值,可以使用`x()`和`y()`方法:
```python
x_pos = view_pos.x()
y_pos = view_pos.y()
```
这样就可以得到QGraphicsView控件距离主界面左上角的位置了。
相关问题
如何让QGraphicsScene原点和QGraphicsView左上角对齐
在 `Qt` 的图形界面设计中,`QGraphicsScene` 和 `QGraphicsView` 的布局默认情况下并不保证它们的原点(也就是场景的 (0,0) 点)和视图的左上角对齐。若要实现这种对齐,你需要自定义一些布局逻辑或者利用 `QGraphicsView` 提供的一些功能。
一种常见的方法是通过设置 `QGraphicsView` 的视口模式(Viewport mode)。你可以选择 `Qt::AspectFit` 或 `Qt::NoViewport` 来保持场景的比例,并且手动调整视图的位置和大小,使得原点对齐:
```cpp
// 创建一个 QScence 和 QGraphicsView
QGraphicsScene scene;
QGraphicsView view(&scene);
// 设置 viewport 模式
view.setViewportMode(Qt::NoViewport);
// 让视口尺寸等于场景的大小
view.setSceneRect(scene.itemsBoundingRect());
// 移动和调整视图的顶部和左边距离
view.setPos(0, -scene.sceneRect().top()); // 避免重叠,让原点在视图上方
// 现在,原点应该位于视图的左上角了
```
上述代码首先关闭了视口模式,这意味着视图的大小会根据场景内容自动调整。接着,我们设置了视口的范围等于场景的所有内容,最后将视图的位置移动到场景的顶部,使得原点与视图的左上角对齐。
QGraphicsView* view = new QGraphicsView(this); QGraphicsScene* scene = new QGraphicsScene(this);在.h文件中使用这两个时,左上角会多一个缩略小图,不想要这个缩略图
这个缩略图是`QGraphicsView`的默认行为,可以通过以下两种方式来禁用它:
1. 通过设置`QGraphicsView`的`setViewportUpdateMode()`方法来禁用缩略图:
```cpp
view->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
```
2. 子类化`QGraphicsView`,并重写`viewportEvent()`方法来禁用缩略图:
```cpp
class MyGraphicsView : public QGraphicsView
{
public:
MyGraphicsView(QWidget* parent = nullptr) : QGraphicsView(parent) {}
protected:
bool viewportEvent(QEvent* event) override
{
if (event->type() == QEvent::Paint)
{
QPainter painter(viewport());
render(&painter);
return true;
}
return QGraphicsView::viewportEvent(event);
}
};
```
然后使用`MyGraphicsView`来代替`QGraphicsView`,就可以禁用缩略图了。
阅读全文