アシスタントのソースコードを調べて解決策を見つけました。
CLucene は常にキャッシュを .qhc と同じフォルダーに書き込みます。
Qt Assistant は、メインの qhc を直接開かないことでこれを処理します。それをユーザー プロファイルにコピーし (Windows では、 でC:\User\Username\appdata\Local\assistant
)、それに応じてパスを更新し、.qch
このユーザー固有のファイルを開きます。
私は同じアプローチを実装しましたが、それは魅力のように機能します。インストーラーに展開する必要さえありません。存在しないパスをqhc
呼び出して直接作成し、次を使用してファイルを登録できます。QHelpEngine
qch
registerDocumentation
だから私が見つけた最良の方法は次のとおりです。
QHelpEngine
存在しない可能性がある .qhc ファイルのパスを使用して、存在し、書き込み可能なフォルダー内に を作成します。これに使いますQStandardPaths::CacheLocation
。Qt は、必要に応じて .qhc ファイルを作成するか、再度開きます。
- すべての .qch ファイルを反復処理し、それらが登録されているかどうかを確認します
engine->registeredDocumentations()
- 登録されていないドキュメントについては、
engine->registerDocumentation
- エンジンはすぐに使用できます
単一のqchファイルを使用したコードは次のとおりです。
QString collPath = QStandardPaths::writableLocation(QStandardPaths::CacheLocation);
QDir().mkpath(collPath);
collPath.append("/myapp.qhc");
engine = new QHelpEngine(collPath, this);
engine->setupData();
QString docPath = QApplication::applicationDirPath()+"/myapp.qch";
docNS = QHelpEngineCore::namespaceName(docPath);
if(docNS.isEmpty() || !engine->registeredDocumentations().contains(docNS))
{
if(engine->registerDocumentation(docPath))
{
qInfo("Registered documentation %s", qPrintable(docPath));
}
else
{
qWarning("Could not register documentation file %s", qPrintable(docPath));
qWarning("Help engine error : %s", qPrintable(engine->error()));
}
}
//Now you can use "engine" in a text browser