Windows 在已安装的应用程序中使用Qt帮助文件

Windows 在已安装的应用程序中使用Qt帮助文件,windows,qt,clucene,Windows,Qt,Clucene,我为windows开发了一个Qt应用程序,帮助文件是用qhc集合文件以qch格式生成的。使用QHelpEngine将帮助嵌入到应用程序中。帮助文件与应用程序可执行文件放在同一个文件夹中,这对于开发人员构建非常有效 但是,当我们使用WiX安装程序在“程序文件”中部署应用程序时,文档可以工作,但搜索功能失败,我得到一个警告: 虚拟void fulltextsearch::clucene::QHelpSearchIndexWriter::run(): 由于CLucene异常而失败 在开发人员构建中,似

我为windows开发了一个Qt应用程序,帮助文件是用qhc集合文件以qch格式生成的。使用QHelpEngine将帮助嵌入到应用程序中。帮助文件与应用程序可执行文件放在同一个文件夹中,这对于开发人员构建非常有效

但是,当我们使用WiX安装程序在“程序文件”中部署应用程序时,文档可以工作,但搜索功能失败,我得到一个警告:

虚拟void fulltextsearch::clucene::QHelpSearchIndexWriter::run(): 由于CLucene异常而失败

在开发人员构建中,似乎CLucene在帮助文件文件夹中创建了一些索引文件。在这里它不能,因为帮助文件在安装文件夹中,标准用户不能在那里写入

该错误是否与缺少索引文件创建权限有关?如何使CLucene改为写入用户文件夹


谢谢

我通过查看助手源代码找到了解决方案

CLucene始终将其缓存写入与.qhc相同的文件夹

Qt Assistant通过不直接打开主qhc来处理此问题。它将其复制到用户配置文件(在windows下,在
C:\user\Username\appdata\Local\assistant
中),相应地更新
.qch
路径,然后打开此用户特定文件

我实施了同样的方法,效果非常好。您甚至不必在安装程序中部署
qhc
,您可以使用不存在的路径调用
QHelpEngine
直接创建一个,并使用
registerDocumentation

因此,我找到的最好方法是:

  • 使用.qhc文件的路径创建一个
    QHelpEngine
    ,该文件可能不存在,但位于一个存在且可写的文件夹中。我使用
    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
    

    我从未见过Qt帮助系统在运行时创建任何附加文件。您可能会遇到问题,因为您的安装程序中没有包含处理qch/qhc文件所需的sqlite sql驱动程序。确实如此,例如,请查看C:\Users\Username\appdata\Local\assistant。我有所有必要的数据,但我面临着同样的问题。请详细说明(或者更好地向我展示一些代码)如何“更新.qch路径”?您不需要更新.qhc文件中的.qch路径,正如我在上一部分中所写的,最好让qt重新创建它。我正在添加更多的细节我缺少注册部分。现在我的代码运行良好。非常感谢。虽然我也忘记了确保新需要的SQL驱动程序包含在我的安装程序中,但这个修复程序对我来说也很有效。这是一个额外的无声错误,我必须强迫Qt告诉我,然后才能工作。