QTextDocument:如何从缓存中删除资源

QTextDocument: How to remove a resource from cache

本文关键字:删除 资源 缓存 QTextDocument      更新时间:2023-10-16

我的程序使用几个不同的QTextBrowser向用户显示内容。其中一些内容有图像。我将其从文件加载到QPixmaps中,并将它们添加到要显示的文本文档中。

假设一个代码是这样的:

QTextBrowser* browser = new QTextBrowser(this);
//Codes to add the browser to GUI
QPixmap pix;
pix.load(file_address);
browser->document()->addResource(QTextDocument::ImageResource, QUrl("url://Test1"), pix);
browser->setHtml( "<img src='url://Test1' width=120 height=90 />" );

稍后,我不再需要浏览器,所以删除它:

browser->deleteLater();

现在我的问题是:如何从缓存中删除添加到此已删除浏览器的资源

QTextDocument的文件提到:

void QTextDocument::addResource(int类型,const QUrl&name,constQVariant&resource)将resourceresource添加到资源缓存中,使用类型和名称作为标识符。

因此,在我关闭应用程序之前,资源一直保留在缓存中。但我需要事先清除它,因为缓存中添加了大量资源,而且应用程序可能会连续运行几天。

缓存的资源附加到QTextDocument实例(而不是全局缓存),并且在文档被销毁或调用QTextDocument::clear()时将被释放。你可以在源代码中看到:

  • 1:QTextDocument::resource调用loadResource实际读取文件内容
  • 2:loadResource将资源内容存储在cachedResources成员中

由于这是与QTextDocument实例关联的私有类的成员,因此它将具有相同的生存期。