Qt 缩放QGraphicsView时调整QPen厚度?

Qt 缩放QGraphicsView时调整QPen厚度?,qt,qgraphicsview,qgraphicsitem,qgraphicsscene,Qt,Qgraphicsview,Qgraphicsitem,Qgraphicsscene,QGraphicsView的一个惊人功能是它能够根据场景内容(实际上插入到场景中的每个QGraphicsItem)进行自我缩放。已正确插入比例的QPixmap,这意味着如果我提供4x4的比例因子: view->scale(4,4); Pixmap按我的意愿进行缩放 但这不是我习惯于画的矩形的情况;它们的目标是围绕我在场景中绘制的像素贴图,无论比例因子如何,它们的厚度都保持为1,而不是-我猜-4 我一直在搜索关于所有这些东西的文档,试图找出“化妆品笔”的确切用途,但我仍然无法使我的矩形变厚

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

view->scale(4,4);
Pixmap按我的意愿进行缩放

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

我一直在搜索关于所有这些东西的文档,试图找出“化妆品笔”的确切用途,但我仍然无法使我的矩形变厚

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

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

这有关系吗


提前感谢并为我在Qt框架和绘图算法领域缺乏经验/知识表示歉意…

在何处实例化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();
}
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QGraphicsView视图;
QsCENE场景;
qgraphicsrecitem*item1=scene.addRect(20,20,20,20);
qgraphicsrecitem*item2=scene.addRect(50,20,20,20);
QPen-pen1,pen2;
pen1.设置宽度(5);
pen2.设置宽度(5);
pen1.设置化妆品(真);
pen2.设置化妆品(假);
项目1->设置笔(pen1);
第2项->设置笔(第2笔);
视图。设置场景(和场景);
view.scale(4,4);//两个矩形的大小相同,但其中一个具有较宽的笔
view.show();
返回a.exec();
}

Show在创建
QPen
的地方使用代码。我们开始:
QPen borderPen(Qt::black);borderPen.SetCosmatic(假);画师->设置笔(边界笔)该示例运行良好,但当我注释setWidth()行时,两个矩形的边缘保持相同的厚度。谢谢你,因为默认宽度是0,这是装饰性的。如果希望厚度随比例增加,则必须将宽度更改为1或更大。