Important: Please read the Qt Code of Conduct -

QGraphicsScenes / View and padding ..... Problem

  • On ubuntu 14.04, QT creator 3.6... I have a QGraphicsView with these style:

    QGraphicsView{color: black; border: 3px solid #5E749C;text-align: top;padding:-4px;border-radius: 7px; border-bottom-left-radius: 7px;background: #cfc;width: 15px; }

    I add a Qrect and Qpixmap in these way...


    then copy the result of operation into qLabel usig a crop with same dimension of outer qrect in Qgraphicsview ..... but the result is not as I expect ....:

    Copy and crop Graphicsviews-result into QLabel

    I suspect the problem is the padding in Qlabel and Qgraphicsview .... but not understand the logic ...

    my code:

    QBrush brush_red(Qt::red, Qt::Dense5Pattern);
        QPen outline(Qt::black);
        QRect r1(QPoint(0, 0), QSize(75, 95));
        QRect r2(QPoint(0, 0), QSize(75, 95));
        QRect r1_1(QPoint(0, 0), QSize(85, 105));
        QRect r2_1(QPoint(0, 0), QSize(85, 105));
        QPixmap bxV("/home/boxcarton-qt.png");
        QPixmap bxH("/home/boxcarton-qt_R.png");
        QPixmap bxV_scal = bxV.scaled(QSize(75, 95), Qt::IgnoreAspectRatio, Qt::FastTransformation);
        QPixmap bxH_scal = bxH.scaled(QSize(75, 95), Qt::IgnoreAspectRatio, Qt::FastTransformation);
        QPixmap bxV_rect = bxV_scal.copy(r1);
        QPixmap bxH_rect = bxH_scal.copy(r2);
        QRectF rect_vbox = ui->VBox->sceneRect();
        scene_VBox = new QGraphicsScene(this);
        ui->VBox->scale(1, 1);
        ui->VBox->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        QRectF rect_hbox = ui->HBox->sceneRect();
        scene_HBox = new QGraphicsScene(this);
        ui->HBox->scale(1, 1);
        ui->HBox->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        rectangle_VBox = scene_VBox->addRect(r1_1, outline, brush_red);
        rectangle_VBox->setPos((110-85)/2, (110-105)/2);
        rectangle_HBox = scene_HBox->addRect(r2_1, outline, brush_red);
        rectangle_HBox->setPos((110-85)/2, (110-105)/2);
        box_VBox = scene_VBox->addPixmap(bxV_rect);
        box_VBox->setPos((110-75)/2, (110-95)/2);
        box_HBox = scene_HBox->addPixmap(bxH_rect);
        box_HBox->setPos((110-75)/2, (110-95)/2);
        QRect rect_final(QPoint(int((110-85)/2), int((110-105)/2)), QSize(85, 105));
        QPixmap grab_VBox = ui->VBox->grab();
        QPixmap grab_HBox = ui->HBox->grab();
        QPixmap crop_VBox = grab_VBox.copy(rect_final);
        ui->VBox_2->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        ui->HBox_2->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);

  • Re: QGraphicsScenes / View and padding ..... Problem

    Make sure to constrain all painting inside the boundaries of boundingRect() to avoid rendering artifacts (as QGraphicsView does not clip the > > painter for you). In particular, when QPainter renders the outline of a shape using an assigned QPen, half of the outline will be drawn outside, > and half inside, the shape you're rendering (e.g., with a pen width of 2 units, you must draw outlines 1 unit inside boundingRect()). QGraphicsItem does not support use of cosmetic pens with a non-zero width.

    So if i use Qpen 1 pixel .... the bounding rect in qgraphicsscene, paint 1px inside and 1px outer ....(obviusly not 0,5 inside and 0,5 outside) ... so QPen border is a problem not padding.....

    other problem depends from the way that I use to draw rect and icon inside a scene...

    For better explain me, using padding into QGraphicsViews is possible but it become part of scene ... so in my case I set 118118 pixel QraphicsView ... than I set into QTCreator GraphicsVievs "scenerect" 110100 px "x=0 y=0" ....... than when crop the image crop it wit offset 4,4 .... so all is well done inseide an area of 110*100 (my search area) than I can copy these image without scale or difference ....


Log in to reply