2

私のプログラムは、いくつか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 type, const QUrl & name, const QVariant & resource)タイプと名前を識別子として使用して、リソースリソースをリソース キャッシュに追加します。

そのため、アプリケーションを閉じるまで、リソースはキャッシュに残ります。ただし、キャッシュには多くのリソースが追加されており、アプリが数日間連続して実行される可能性があるため、事前にクリアする必要があります。

4

1 に答える 1

1

キャッシュされたリソースはQTextDocument(グローバル キャッシュではなく) インスタンスにアタッチされ、ドキュメントが破棄されるか、またはQTextDocument::clear()が呼び出されると解放されます。ソースコードで確認できます:

  • 1 :ファイルの内容を実際に読み取るためのQTextDocument::resource呼び出し。loadResource
  • 2 :リソースの内容をメンバーloadResourceに格納しますcachedResources

これはQTextDocumentインスタンスに関連付けられたプライベート クラスのメンバーであるため、有効期間は同じです。

于 2016-01-12T04:40:15.430 に答える