Unsolved drawing shapes onto QPixmap with QPaintEvent
-
-
@mrjj is is perhaps better to use drawForeground and drawBackground for this issue, or wouldn't it matter?
-
@hobbyProgrammer
Hi
well DrawForeground and DrawBackground is often used for Grid feature or
similar. However, if you pixmap is sort of a background type, it would make sense but i cant promise it works better since i do not see why it would not
call the paintEvent for the view. Or what it is you are seeing.Also since you do not seem to call QGraphicsView normal paint,
i wonder if you dont use any of QGraphicsView features besides
just drawing on it ? -
@mrjj Hi,
All the code I used, I posted here so if it's not in this part of the code, it's nowhere in the code.
I'm going to try to recreate the project step by step, maybe I'll find the mistake. -
@hobbyProgrammer
Hi
Just to be sure i understand the actual task.
You want to show an image and then draw points by clicking
on the image. These points should be "live" meaning they should not be combined with image but drawn on top of the image ?Is it a requirement that the image can be zoomed and panned around and those points follow the scaling?
-
@mrjj yes exactly! but when I zoom in and out I would like there to be a scrollbar so that I can view and edit the entire image and not just the upper part.
-
Well im asking as you use the GraphicsView in a (in my opinion) odd way
as you treat it like the QWidget paint.
Normally one would use
https://doc.qt.io/qt-5/qgraphicspixmapitem.html
for the image and and make a custom QGraphicsItem to handle the overlay points
and in other ways used the features of the QGraphicsScene/view.Where are you seem to directly draw on the view as a normal Widget.
Its not criticism! i just wondered if you needed all of the QGraphicsScene/view stuff as doing with just a QWidget and paint is far more simple if
all the other features is not needed.And when you just overwrite paint for view (as the code you shown), then you are not using ANY of the selection/grouping/scaling etc of the Graphics Framework.
So i had to ask :) -
@mrjj okay, but I still don't get how to use the QGraphicsScene/View now.
Do I make the ScrollArea a QGraphicsView and then load the QGraphicsPixmap into the QGraphicsView?I don't really get the structure that is needed for this.
-
Hi
Normally the one would use QGraphicsPixmapItem
and maybe a custom item for the lines/polygon.
You would not need a ScrollArea -
@mrjj Okay so I tried to make a new graphicsview and this is the code.
It doesn't seem to load the pixmap.
It's probably a stupid mistake (I make them a lot), since I've wasted way too much time on this.#include "graphicsview.h" GraphicsView::GraphicsView(QWidget *parent) : QGraphicsView(parent) { scene = new QGraphicsScene(this); setScene(scene); } void GraphicsView::open() { filename = QFileDialog::getOpenFileName(this,tr("Open File"), QDir::currentPath(), tr("Image Files(*.png *.jpg *.jpeg)")); qDebug() << filename; QGraphicsPixmapItem *pixmap = scene->addPixmap(QPixmap(filename)); update(); }