我一直在潜伏这些问题并学到了很多东西,但最近遇到了一个我不明白的问题。我正在使用 Qt,需要在各种类方法中创建/替换 QMovie 对象(最终在 QLabel 中设置)。我已经使用 new 关键字定义了对象。因此在我的标题中
QMovie * movie;
为简单起见,我将把等效代码放在一个方法中。这相当于两行代码
QMovie * movie = new QMovie(QByteArray1,this);
QMovie * movie = new QMovie(QByteArray2,this);
这可行(我不知道为什么),但由于它是重复操作,我担心内存泄漏。看来第二个定义成功地替换了第一个定义,但是因为大概它们每个都有不同的指针,所以我不知道如何删除指向第一个定义的指针。我在类析构函数中删除了电影,但不知道它是否会删除所有内容。有人知道这里发生了什么吗?
PS我这样做是因为(我在Qt中找到)使用QByteArray(从网上下载)中的数据创建QMovie对象的唯一方法是使用QMovie构造函数。如果我只想用文件中的新数据替换当前电影数据,我可以使用该方法
movie->setFileName(fileName);
但这不是使用二进制数据时的选择。注意:QMovie 也有一个构造函数,它有一个文件名而不是 QByteArray 作为参数。使用文件名也可以使用上面的代码并且更容易测试。
任何帮助将不胜感激。