QImage 构造函数
QImage(uchar *data, int width, int height, Format format, QImageCleanupFunction cleanupFunction = Q_NULLPTR, void *cleanupInfo = Q_NULLPTR); QImage(const uchar *data, int width, int height, Format format, QImageCleanupFunction cleanupFunction = Q_NULLPTR, void *cleanupInfo = Q_NULLPTR); QImage(uchar *data, int width, int height, int bytesPerLine, Format format, QImageCleanupFunction cleanupFunction = Q_NULLPTR, void *cleanupInfo = Q_NULLPTR); QImage(const uchar *data, int width, int height, int bytesPerLine, Format format, QImageCleanupFunction cleanupFunction = Q_NULLPTR, void *cleanupInfo = Q_NULLPTR); explicit QImage(const QString &fileName, const char *format = Q_NULLPTR);这些全部都是浅拷贝构造函数,就是说图像的数据部分不会进行复制。
也就是说,如果把构造图片时使用的图像数据释放,这些图片的内容就无效,只是一些无效数据。
QImage *imgTmp = new QImage(path);调用这个语句会生成一个QImage对象的指针。 然而当对这个指针进行释放,即使这个对象调用析构函数之后,这个图像的图像数据部分不会同步进行释放。
QImage *imgTmp = new QImage(path); QImage img1 = *imgTmp; delete imgTmp;就像这样,如果把imgTmp这个指针释放,在img1 这一对象还是完整的,图像数据部分还存在,这个图片还可以正常显示。