QTextDocument: как удалить ресурс из кэша

Моя программа использует несколько разных QTextBrowsers, чтобы показать содержимое пользователю. Некоторые из этих материалов имеют изображения. который я загружаю из файла в 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 & ресурс) Добавляет ресурс ресурс в кэш ресурсов,
используя тип и имя в качестве идентификаторов.

Итак, ресурс остается в кеше, пока я не закрою приложение. Но мне нужно очистить это заранее, потому что в кеш добавляется много ресурсов, и приложение может работать несколько дней подряд.

1

Решение

Кэшированные ресурсы прикреплены к QTextDocument экземпляр (не глобальный кеш), и будет освобожден, когда документ уничтожен или когда QTextDocument::clear() называется. Вы можете увидеть в исходном коде:

  • 1: QTextDocument::resource звонки loadResource на самом деле читать содержимое файла.
  • 2: loadResource сохраняет содержимое ресурса в cachedResources член

Поскольку это член частного класса, связанный с QTextDocument Например, он будет иметь то же время жизни.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]