10

一个惊人的功能QGraphicsView是它能够根据场景的内容(实际上插入场景中的每个 QGraphicsItem)来缩放自身。我正确插入的比例尺,这QPixmap意味着如果我提供 4x4 的比例因子:

view->scale(4,4);

像素图按照我的意愿进行缩放。

但这不是我习惯绘制的矩形的情况。他们的目标是围绕我在场景中绘制的像素图,无论比例因子如何,它们的厚度都保持为 1 而不是 - 我猜 - 4。

我一直在搜索所有这些东西的文档,试图弄清楚“化妆笔”的确切用途,但我仍然无法让我的矩形变厚。

最后通知:我有一个自定义QGraphicsItem,用于绘制矩形的 QPen 在

virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);

方法。

有关系吗?

提前感谢并为我在 Qt 框架和绘图算法领域缺乏经验/知识而道歉......

4

1 回答 1

17

在哪里实例化 QPen 并不重要。

QPen 的默认宽度为 0。这是一个特殊值,表示修饰为 true,宽度实际上为 1。因此,如果您不希望笔具有修饰效果,则必须将其设置为所需的宽度。您可能还需要将外观设置为 false。

这是一个简单的例子:

#include <QtGui>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QGraphicsView view;
    QGraphicsScene scene;

    QGraphicsRectItem *item1 = scene.addRect(20, 20, 20, 20);
    QGraphicsRectItem *item2 = scene.addRect(50, 20, 20, 20);

    QPen pen1, pen2;
    pen1.setWidth(5);
    pen2.setWidth(5);
    pen1.setCosmetic(true);
    pen2.setCosmetic(false);

    item1->setPen(pen1);
    item2->setPen(pen2);

    view.setScene(&scene);
    view.scale(4, 4); // both rects are the same size, but one a has wider pen
    view.show();

    return a.exec();
}
于 2012-10-29T12:08:51.753 回答