gpt4 book ai didi

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

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

我的程序使用几个不同的 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提到:

void QTextDocument::addResource(int type, const QUrl & name, const QVariant & resource) Adds the resource resource to the resource cache, using type and name as identifiers.

因此,在我关闭应用程序之前,资源一直保留在缓存中。但是我需要事先清除它,因为有很多资源被添加到缓存中,应用程序可能会连续运行几天。

最佳答案

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

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

因为这是与 QTextDocument 实例关联的私有(private)类的成员,所以它将具有相同的生命周期。

关于c++ - QTextDocument:如何从缓存中删除资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34735595/

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