使用自定义坐标与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::setWindow
和QPainter::setViewport
创建一个自定义映射模式,但我看不出如何使用图形场景支持这样做。
答
Stephen Chu让我走上正确的道路 - 使用scale
似乎工作。
const qreal xScale = physicalDpiX()/254.0;
const qreal yScale = physicalDpiY()/254.0;
view->scale(xScale, yScale);
这导致在屏幕上看起来准确的测量结果。