gpt4 book ai didi

c++ - 难以存储 QImage 然后恢复它

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:36:37 25 4
gpt4 key购买 nike

好吧,我正在尝试在许 multimap 像绘制程序中实现类似于“撤消”功能的功能。我遇到的问题是:我正在尝试在 QVector 中制作 QImage 对象的备份拷贝(最多存储 10 个最新的 QImage 拷贝用于备份),然后尝试在另一个函数中检索这些备份。问题是没有正确创建备份(因为当我尝试恢复备份图像时,没有任何反应)。我知道问题出在备份部分而不是恢复部分,因为当我备份一个带有红色背景的新临时图像时,它可以完美恢复..

这是备份功能代码:

imageBackups.append(image);

其中“图像”是我要备份的 QImage 对象..

这是一个备用备份(存储红色背景图像)- 我用它只是为了看看这个版本的备份是否有效,它确实有效:

QImage newImage(QSize(100,100), QImage::Format_RGB32);
newImage.fill(qRgb(255, 0, 0));
imageBackups.append(newImage);

这是恢复代码:

image =imageBackups.at(imageBackups.size()-1);
QPainter painter(&image);
painter.drawImage(QPoint(0,0),imageBackups.at(imageBackups.size()-1));

'image' 的定义与上面的 newImage 完全相同,除了在本例中为 800x400 的大小..

最佳答案

newImage 在超出范围时开始析构,我猜 append 正在做某种浅拷贝,它只存储对图像的引用。QT对一些对象做了自动引用计数,具体记不清了

尝试使用 new 创建 QImage 并将指针存储在 imageBackups 中(无论如何是一种更好的方法)。

像这样(注意 imageBackups 现在需要是一个 QIMage* 数组)

QImage pImage = new QImage(QSize(100,100), QImage::Format_RGB32);
pImage->fill(qRgb(255, 0, 0));
imageBackups.append(pImage);

关于c++ - 难以存储 QImage 然后恢复它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3119842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com