使用自定义坐标与QGraphicsScene

问题描述:

我正在试验所见即所得的编辑器,允许用户在页面上绘制形状和Qt图形场景支持似乎完美。然而,我不想用像素工作,而是希望所有的对象都能在十分之一毫米的范围内工作,但我不知道如何实现这一点。使用自定义坐标与QGraphicsScene

例如:

// Create a scene that is the size if an A4 page (2100 = 21cm, 2970 = 29.7cm) 
QGraphicsScene* scene = new QGraphicsScene(0, 0, 2100, 2970); 
// Add a rectangle located 1cm across, 1cm down, 5cm wide and 2cm high 
QGraphicsItem* item = scene->addRect(100, 100, 500, 200); 
... 
QGraphicsView* view = new QGraphicsView(scene); 
setCentralWidget(view); 

现在,当我显示场景上面我想要的形状出现在了屏幕DPI正确的大小。这仅仅是一个使用QGraphicsView::scale的案例,还是我必须做更复杂的事情?

需要注意的是,如果我使用的是定制的,而不是QWidget的话,我会用QPainter::setWindowQPainter::setViewport创建一个自定义映射模式,但我看不出如何使用图形场景支持这样做。

QGraphicsView::scale应该做的工作。但我更喜欢设置transform。它让我更好地控制场景的显示方式。但是那是因为我需要旋转,翻转等东西。它也允许我跟踪我在场景中做了什么。

Stephen Chu让我走上正确的道路 - 使用scale似乎工作。

const qreal xScale = physicalDpiX()/254.0; 
const qreal yScale = physicalDpiY()/254.0; 
view->scale(xScale, yScale); 

这导致在屏幕上看起来准确的测量结果。