我通过查看助手源代码找到了解决方案。
CLucene 总是将其缓存写入与 .qhc 相同的文件夹
Qt 助手通过不直接打开主 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