Qt将窗口坐标原点定位到中心
时间: 2023-09-06 09:09:41 浏览: 120
要将窗口坐标原点定位到中心,可以使用`QGraphicsView`来实现。首先,创建一个`QGraphicsView`对象,并将其设置为中心窗口部件:
```cpp
QGraphicsView *view = new QGraphicsView(this);
setCentralWidget(view);
```
然后,创建一个`QGraphicsScene`对象,并将其设置为`QGraphicsView`的场景。在场景中添加一个`QGraphicsRectItem`对象,它将作为窗口的背景。
```cpp
QGraphicsScene *scene = new QGraphicsScene(view);
view->setScene(scene);
QRectF rect(-width() / 2, -height() / 2, width(), height());
QGraphicsRectItem *background = new QGraphicsRectItem(rect);
background->setBrush(Qt::white);
scene->addItem(background);
```
最后,将视图的中心点设置为场景中心点:
```cpp
view->setSceneRect(rect);
view->setAlignment(Qt::AlignCenter);
```
这样,窗口的坐标原点就被定位到了窗口的中心。
相关问题
qt视口坐标和窗口坐标
在Qt中,视口坐标(Viewport Coordinates)是指相对于当前可见区域的坐标,通常是指一个控件中的坐标系统。而窗口坐标(Window Coordinates)是指相对于窗口的坐标,通常是指窗口的左上角为原点的坐标系统。
在一个控件中,例如一个QScrollArea,当用户滚动时,控件会显示一个部分内容,这部分内容的坐标系就是视口坐标系。而控件自身的坐标系就是窗口坐标系。在Qt中,可以通过QScrollArea的viewport()函数获取视口对象,通过QWidget的pos()函数获取窗口坐标系的坐标。同时,可以通过QScrollBar的value()函数获取当前滚动位置,进而计算出视口坐标系中的坐标。
需要注意的是,对于一些特殊控件,例如QGraphicsView,其坐标系会更加复杂,需要更加详细的了解和处理。
QT 绘图更改坐标系
在Qt中,我们可以通过调用`QPainter::translate()`方法来更改绘图坐标系。这个方法可以将坐标系沿着x轴和y轴分别平移一定的距离,从而改变坐标系的原点位置。
例如,如果我们想将坐标系的原点从左上角移动到中心点,我们可以这样做:
```cpp
void MyWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
// 将坐标系平移到中心点
painter.translate(width() / 2, height() / 2);
// 绘制一个圆
painter.drawEllipse(-50, -50, 100, 100);
}
```
在上面的代码中,我们首先将坐标系平移到了窗口的中心点,然后绘制了一个半径为50的圆。由于我们已经将坐标系平移了50个像素,所以圆的位置需要向左上方移动50个像素,才能保证圆心在坐标系的原点上。因此,我们将绘制圆的区域设置为`(-50, -50, 100, 100)`。
需要注意的是,`QPainter::translate()`方法只会影响后续的绘制操作,对之前已经绘制的图形没有影响。如果我们需要恢复坐标系到原来的位置,可以调用`QPainter::save()`方法保存当前的状态,然后在绘制完成后调用`QPainter::restore()`方法恢复状态。
阅读全文