I'm a newbie to Qt/Embedded. I want to use QPainter
to draw stuff on a QPixmap
, which will be added to QGraphicsScene
. Here is my code. But it does not show the drawings on the pixmap. It shows only the black pixmap.
int main(int argc, char **argv) {
QApplication a(argc, argv);
QMainWindow *win1 = new QMainWindow();
win1->resize(500,500);
win1->show();
QGraphicsScene *scene = new QGraphicsScene(win1);
QGraphicsView view(scene, win1);
view.show();
view.resize(500,500);
QPixmap *pix = new QPixmap(500,500);
scene->addPixmap(*pix);
QPainter *paint = new QPainter(pix);
paint->setPen(*(new QColor(255,34,255,255)));
paint->drawRect(15,15,100,100);
return a.exec();
}
QPixmap
should be created withoutnew
keyword. It's usually passed by value or reference, not by pointer. One of the reasons is thatQPixmap
is not capable of tracking its changes. When you add a pixmap to a scene usingaddPixmap
, only the current pixmap is used. Further changes will not affect the scene. So you should calladdPixmap
after you make changes.Also you need to destroy
QPainter
before you use the pixmap to ensure that all changes will be written to the pixmap and to avoid memory leak.You need to do the painting on the bitmap before you add it to the scene. When you add it to the scene, the scene will use it to construct a
QGraphicsPixmapItem
object, which is also returned by theaddPixmap()
function. If you want to update the pixmap after it has been added, you need to call thesetPixmap()
function of the returnedQGraphicsPixmapItem
object.So either:
or: