我的程序正在使用几种不同的QTextBrowser来向用户显示内容。其中一些内容具有图像。我从文件加载到QPixmap并将其添加到文本文档中以显示。

假设这样的代码:

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();

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



因此,资源将保留在缓存中,直到我关闭应用程序为止。但是我需要事先清除它,因为缓存中添加了很多资源,并且该应用程序可能连续运行几天。

最佳答案

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

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


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

    07-28 02:38