我为Windows开发了一个Qt应用程序,该帮助文件是使用qhc收集文件以qch格式生成的。使用QHelpEngine将帮助嵌入到应用程序中。帮助文件与应用程序可执行文件放置在同一文件夹中,这对于开发人员构建来说效果很好。
但是,当我们使用WiX安装程序将应用程序部署在“程序文件”中时,文档可以运行,但是搜索功能失败,并且我收到警告:
virtual void fulltextsearch :: clucene :: QHelpSearchIndexWriter :: run():由于CLucene异常而失败。
在开发版本上,CLucene似乎在帮助文件文件夹中创建了一些索引文件。由于帮助文件位于安装文件夹中,因此标准用户无法在此处进行写操作,因此这里不能。
该错误与缺少索引文件创建权限有关吗?如何使CLucene写入用户文件夹?
谢谢
我通过查看辅助源代码找到了解决方案。
CLucene始终将其缓存与.qhc写入同一文件夹
Qt Assistant通过不直接打开主qhc来处理此问题。它将其复制到用户配置文件(在中,在Windows中C:\User\Username\appdata\Local\assistant
),相应地更新.qch
路径,然后打开此用户特定的文件。
我实现了相同的方法,它就像一种魅力。您甚至不必qhc
在安装程序中部署,您可以通过QHelpEngine
使用不存在的路径进行调用直接创建一个,然后qch
使用registerDocumentation
因此,我发现的最好方法是:
QHelpEngine
.qhc文件的路径,该文件可能不存在,但在存在且可写的文件夹中。我用QStandardPaths::CacheLocation
这个。如果需要,Qt将创建一个.qhc文件,或再次打开它。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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句