使用QGraphicsScene的自定义坐标

时间:2010-06-06 12:47:50

标签: c++ qt qt4

我正在尝试一个WYSIWYG编辑器,允许用户在页面上绘制形状,而Qt图形场景支持似乎是完美的。但是,我不是以像素为单位工作,而是希望所有QGraphicsItem个对象以十分之一毫米的速度工作,但我不知道如何实现这一目标。

例如:

// 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创建自定义映射模式,但我无法使用图形场景支持看到如何执行此操作。

2 个答案:

答案 0 :(得分:2)

QGraphicsView::scale应该做的工作。但我更喜欢设置transform。它让我可以更好地控制场景的显示方式。但那是因为我需要旋转,翻转等内容。它还允许我跟踪我对场景所做的事情。

答案 1 :(得分:0)

Stephen Chu让我走上了正确的道路 - 使用scale似乎有效。

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

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