Из Qt docs для QLabel::pixmap()
:
This property holds the label's pixmap
If no pixmap has been set this will return 0.
... поэтому, когда вы делаете это:
QImage tmp = _layers.back()->pixmap()->toImage();
pixmap()
возвращаетсяNULL (потому что на QLabel еще никогда не было установлено ни одного QPixmap), а затем вы пытаетесь разыменовать этот NULL-указатель для вызова toImage()
, поэтому происходит сбой.
Чтобы избежать сбоя, непопробуйте создать QImage из NULL-указателя QPixmap.
Я подозреваю, что вы хотите вызывать grab()
вместо pixmap()
- grab()
создаст для вас QPixmap, который содержит визуальный видQLabel.Тем не менее, еще лучшим подходом было бы вообще не связываться с QPixmaps
;вместо этого создайте свой собственный подкласс класса QLabel
и переопределите его метод paintEvent(QPaintEvent *)
, чтобы сначала вызвать до QLabel::paintEvent(e)
, а затем используйте QPainter, чтобы впоследствии нарисовать дополнительную точку.Это будет легче реализовать, а также будет более эффективным во время выполнения.