缩放QGraphicsView时调整QPen厚度?

Geo*_* R. 9 qt qgraphicsview qgraphicsitem qgraphicsscene

它的一个惊人功能QGraphicsView是能够根据场景的内容进行缩放(实际上每个QGraphicsItem都插入到场景中).在QPixmap我已经正确插入秤,也就是说,如果我提供了4×4的比例因子与此:

view->scale(4,4);
Run Code Online (Sandbox Code Playgroud)

像我想要的那样缩放Pixmap.

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

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

最后通知:我有一个自定义QGraphicsItem和用于绘制矩形的QPen在运行中即时实现

virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
Run Code Online (Sandbox Code Playgroud)

方法.

有关系吗?

在此感谢您对Qt框架和绘图算法领域缺乏经验/知识表示歉意......

Ant*_*ony 14

在实例化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();
}
Run Code Online (Sandbox Code Playgroud)