Ok well I’m trying implement something similar to the ‘undo’ function in many image drawing programs .. The problem I’m having is this: I’m trying to make a backup copy of a QImage object in a QVector (which stores upto 10 latest QImage copies for backup purposes), and then try to retrieve these backups in another function. The issue is that the backup is not being created properly (since when I try to recover a backuped image, nothing happens). I know the problem is somewhere in backing up part and not in the recovering part, since when I backup a new temporary image with a red background, it recovers perfectly ..
This is the backing up function code:
imageBackups.append(image);
where ‘image’ is the QImage object that I’m trying to backup ..
This is an alternate backing up (stores a red colored background image) – I used this just to see if this version of backing up works, which it does:
QImage newImage(QSize(100,100), QImage::Format_RGB32);
newImage.fill(qRgb(255, 0, 0));
imageBackups.append(newImage);
And here is the recovering code:
image =imageBackups.at(imageBackups.size()-1);
QPainter painter(&image);
painter.drawImage(QPoint(0,0),imageBackups.at(imageBackups.size()-1));
‘image’ is defined exactly like newImage above, except the size which is 800×400 in this case..
It may has something to do with how you created image. If you use one of the constructors that takes a
uchar *buffer (constor not), you have to make sure the buffer is valid through out the life of theQImageand its copies:http://doc.trolltech.com/latest/qimage.html#QImage-5
If at the time of your restoring of the image from
QVector, the buffer is deleted, the restoredQImagewill be using some stale memory location as it’s buffer.