代码之家  ›  专栏  ›  技术社区  ›  Rob

将自定义坐标与qgraphicscene一起使用

  •  2
  • Rob  · 技术社区  · 14 年前

    我正在尝试使用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::setWindow QPainter::setViewport 创建自定义映射模式,但我看不到如何使用图形场景支持来执行此操作。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Stephen Chu    14 年前

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

        2
  •  0
  •   Rob    14 年前

    朱棣文让我走上了正确的道路 scale 似乎起作用了。

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

    这使得测量结果在屏幕上看起来很精确。