PDA

View Full Version : Having difficulty in storing a QImage and then recovering it ..



ahmadka
25th June 2010, 18:01
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(imag eBackups.size()-1));


'image' is defined exactly like newImage above, except the size which is 800x400 in this case..

tbscope
25th June 2010, 18:14
image =imageBackups.at(imageBackups.size()-1);

Technically, this is wrong when you want the implement an undo stack as you also need to delete any other image after it.

What's wrong with your code? Simple: size() returns the amount of items in your list. And at() starts counting from 0.
If you have 2 images in your list, size() returns 2. 2-1=1. Thus, at(2-1) returns the item at position 1, which is the second item in the list and in thus the last item ;-)

Did you know that Qt comes with undo and redo functionality?
http://doc.qt.nokia.com/4.6/qundocommand.html