gpt4 book ai didi

c++ - QImage:如何正确销毁指向像素数据的指针?

转载 作者:太空宇宙 更新时间:2023-11-04 14:53:07 28 4
gpt4 key购买 nike

在我控制窗口的主类中,我有这个函数,其中 pixmapItem 是类头中定义的 QGraphicsPixmapItem*:

void updateDisplay() {
uchar *data = new ...; // array of pixel data
...
QImage image = QImage(data, width, height,
width, QImage::Format_Indexed8);

pixmapItem->setPixmap(QPixmap::fromImage(image));
}

我的问题是:当不再需要 data 时,如何销毁它? “不再需要”意味着上面的函数或我的类中的另一个函数将像素图设置为另一个图像。

我已经看到 QImage 具有可能有用的清理功能,但文档并不清楚如何使用它们以及如何传递要删除的图像的数据指针等参数。

最佳答案

QImage销毁时可以删除数据;如上面的@JeremyFriesner 所示,这可以通过在内部范围内定义 QImage 实例并在其外部分配/取消分配数据来简单地完成。

但是,为什么要为所有这些工作烦恼呢? QImage 构造函数可以适应复杂的用例,在这些用例中,您已经拥有来自其他来源的像素数据,或者您需要将其保留“奇怪”的生命周期。

你的情况反而更简单,像素数据与 QImage 具有完全相同的生命周期,所以让它自己为像素分配内存是一个更好的主意;这样你就可以确保它的大小和对齐正确,并且它由 QImage 实例拥有/自动销毁; QImage 对象构建后,您可以使用 bits 方法获得一个指向像素数据的指针,并用它做任何您想做的事。

这样,您的代码将简单地变成:

void updateDisplay() {
QImage image = QImage(width, height,
width, QImage::Format_Indexed8);
uchar *data = image.bits();
...

pixmapItem->setPixmap(QPixmap::fromImage(image));
}

更简单、更安全且内存泄漏风险为零。

关于c++ - QImage:如何正确销毁指向像素数据的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40968150/

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