Моя программа использует несколько разных QTextBrowser
s, чтобы показать содержимое пользователю. Некоторые из этих материалов имеют изображения. который я загружаю из файла в 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();
Теперь моя проблема: Как я могу удалить ресурсы, которые были добавлены в этот удаленный браузер, из кэша?
QTextDocument
«s документ упоминает, что:
void QTextDocument :: addResource (тип int, const QUrl & имя, конст
QVariant & ресурс) Добавляет ресурс ресурс в кэш ресурсов,
используя тип и имя в качестве идентификаторов.
Итак, ресурс остается в кеше, пока я не закрою приложение. Но мне нужно очистить это заранее, потому что в кеш добавляется много ресурсов, и приложение может работать несколько дней подряд.
Кэшированные ресурсы прикреплены к QTextDocument
экземпляр (не глобальный кеш), и будет освобожден, когда документ уничтожен или когда QTextDocument::clear()
называется. Вы можете увидеть в исходном коде:
QTextDocument::resource
звонки loadResource
на самом деле читать содержимое файла.loadResource
сохраняет содержимое ресурса в cachedResources
членПоскольку это член частного класса, связанный с QTextDocument
Например, он будет иметь то же время жизни.
Других решений пока нет …