缩放QGraphicsView时调整QPen厚度?

时间:2012-10-29 11:11:53

标签: qt qgraphicsview qgraphicsitem qgraphicsscene

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

view->scale(4,4);

像我想要的那样缩放Pixmap。

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

我一直在搜索所有这些东西的文档,试图找出“化妆笔”的确切目的,但我仍然无法让我的矩形更厚。

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

中即时实现
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);

方法

重要吗?

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

1 个答案:

答案 0 :(得分:13)

在实例化QPen的地方并不重要。

QPen的默认宽度为0.这是一个特殊值,表示化妆品为真,宽度实际为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();
}