Making the sheet displaying QGraphicsItem CanvasItem of Calligra transparent on a GraphicsScene
Boudewijn Rempt
boud at valdyas.org
Fri Nov 30 13:39:17 GMT 2012
On Fri, 30 Nov 2012, Philip Van Hoof wrote:
> Hi there,
>
> I'm trying to make the cells of a spreadsheet document which I have
> loaded using sheets/part/CanvasItem.h, which is a GraphicsItem,
> transparent.
Hm... let's see. The basic painting code is in CanvasBase.cpp, where line
477 says
painter->fillRect(paintRect, painter->background());
But where is the background on the QPainter object set... I think we need
Mek to figure that out. You could hack your version of sheets' canvasbase
here to something like
Qt::BGMode bgMode = painter->backgroundMode();
painter->setBackgroundMode(Qt::TransparentMode();
...
painter->setBackgroundMode(bgMode);
sheet->backgroundImageProperties are something different, I think -- it
must be meant to show an actual image as specified by the document, like a
watermark.
QGraphicsItem::setOpacity also isn't what you need, since that would set
the opacity for everything including the cell foregrounds.
>
> I tried the following code, but although the result is that the color of
> all cells changes, the color it uses isn't transparent but white. Or
> perhaps it is transparent but there is something white behind the cells
> anyway.
>
> QGraphicsRectItem rect;
>
> Part *part = new Part(0);
> Doc *doc = new Doc(part);
> part->setDocument(doc);
>
> CanvasItem *m_canvas = new CanvasItem (doc);
> m_canvas->setParentItem(&rect);
>
> Sheet *sheet = m_canvas->activeSheet();
>
> Calligra::Sheets::Region region = Calligra::Sheets::Region(1, 1, KS_colMax, KS_rowMax);
>
> Style style;
> QBrush brush;
> brush.setColor(Qt::transparent);
> style.setBackgroundBrush(brush);
> style.setBackgroundColor(Qt::transparent);
>
> Sheet::BackgroundImageProperties props = sheet->backgroundImageProperties();
> props.opacity = 0;
> sheet->setBackgroundImageProperties( props );
>
> CellStorage *cells = sheet->cellStorage();
> cells->setStyle(region, style);
>
> scene.addItem(&rect);
>
> Does somebody know how I can make it be truly transparent? Is there
> something being drawn behind the CellView instances that is white? Like
> a background maybe?
>
> I noticed the existence of the API sheet->setBackgroundImageProperties.
> As you can see above I tried using it, but it didn't change much.
>
> If I would have to patch Calligra to make this effect possible, where
> should I start looking?
>
> Kind regards,
>
> Philip
>
>
>
> --
>
>
> Philip Van Hoof
> Software developer
> Codeminded BVBA - http://codeminded.be
>
> _______________________________________________
> calligra-devel mailing list
> calligra-devel at kde.org
> https://mail.kde.org/mailman/listinfo/calligra-devel
>
More information about the calligra-devel
mailing list