在Qt框架中,QGraphicsScene和QGraphicsView的坐标系统是可以配置和调整的,以实现不同的布局需求。要使QGraphicsScene的左上角坐标与QGraphicsView的左上角坐标重合,可以通过调整QGraphicsScene和QGraphicsView的坐标系统和对齐方式来实现。以下是一些步骤和建议:
一、理解坐标系统
-
QGraphicsScene的坐标系统:
QGraphicsScene使用自己的坐标系统来定义和布局其中的图形项(如QGraphicsRectItem、QGraphicsEllipseItem等)。- 这个坐标系统的原点(0,0)通常位于场景的左上角。
-
QGraphicsView的坐标系统:
QGraphicsView的坐标系统是基于窗口(视口)的坐标系统。- 其原点通常位于视口的左上角,x轴向右为正,y轴向下为正。
二、实现左上角坐标重合
-
设置QGraphicsScene的对齐方式:
- 默认情况下,
QGraphicsScene的内容可能会根据视图的变换而有所偏移。要使QGraphicsScene的左上角与QGraphicsView的左上角重合,可以通过调整场景的对齐方式来实现。 - 可以使用
QGraphicsScene::setAlignment方法来设置场景的对齐方式,将其设置为左上角对齐。例如:
scene->setAlignment(Qt::AlignTop | Qt::AlignLeft); - 默认情况下,
-
调整场景的坐标范围:
- 创建
QGraphicsScene时,可以指定其坐标范围。如果希望场景的左上角与视图的左上角重合,可以将场景的左上角坐标设置为(0,0),并确保场景的宽度和高度与视图的宽度和高度相匹配(或至少不小于视图的尺寸)。 - 例如:
QGraphicsScene *scene = new QGraphicsScene(0, 0, viewWidth, viewHeight);- 其中
viewWidth和viewHeight是QGraphicsView的宽度和高度。
- 创建
-
设置QGraphicsView的显示内容:
- 使用
QGraphicsView::setScene方法将配置好的QGraphicsScene设置为QGraphicsView的显示内容。
- 使用
三、示例代码
以下是一个简单的示例代码,展示了如何设置QGraphicsScene和QGraphicsView,使它们的左上角坐标重合:
#include <QApplication>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsRectItem>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 创建QGraphicsView
QGraphicsView *view = new QGraphicsView;
// 设置QGraphicsView的宽度和高度
int viewWidth = 800;
int viewHeight = 600;
view->setFixedSize(viewWidth, viewHeight);
// 创建QGraphicsScene,并设置其坐标范围与QGraphicsView相匹配
QGraphicsScene *scene = new QGraphicsScene(0, 0, viewWidth, viewHeight);
// 设置QGraphicsScene的对齐方式为左上角对齐
scene->setAlignment(Qt::AlignTop | Qt::AlignLeft);
// 向场景中添加一个图形项作为示例
QGraphicsRectItem *rectItem = scene->addRect(0, 0, 100, 100, QPen(), QBrush(Qt::red));
// 将场景设置为视图的显示内容
view->setScene(scene);
// 显示窗口
view->show();
return app.exec();
}
在这个示例中,QGraphicsScene的左上角坐标与QGraphicsView的左上角坐标重合,并且在场景中添加了一个红色的矩形作为示例。
2546

被折叠的 条评论
为什么被折叠?



