当前位置:   article > 正文

Qt学习——利用Qt Assistant 定制帮助文档_制作qt assitant文件

制作qt assitant文件

环境:windows10+Qt 5.10.1

一、概述

Qt可以通过Qt Assistant为自己的应用程序编制帮助文档,文件目录架构如下:

  1. helpdocument
  2. │  about.txt //说明
  3. │  assistant.exe 
  4. │  help.qch // .qhp生成
  5. │  help.qhc //  .qhcp生成
  6. │  help.qhcp// 帮助文档窗口界面描述
  7. │  help.qhp // 帮助文档描述
  8. ├─htmlDocument //帮助文档,请注意html文档格式
  9. │      about.html
  10. │      error.html
  11. │      function.html
  12. │      index.html
  13. └─imageDocument //文档图片
  14.         icon.jpg
  15.         robot.png

 

二、创建.qhp文件并生成.qch文件

2.1 文件建立

qhp文件

Qt Help Project的缩写,qhp类型文件是XML格式的,负责组织实际用到的帮助文件(通常为HTML文件,即需要在Qt Assistant中浏览的文件)。

qch文件

Qt Compressed Help的缩写,qch类型文件是二进制格式的,qch文件是Qt Assistant能够识别的文档最小单元,可以通过Qt Assistant->编辑->首选项->文档标签页->添加/移除操作来注册或者注销一个qch文件。也可以通过命令“assistant -register doc.qch”来注册qch文件。注册后,即可在Assistant界面中浏览帮助文档。

创建help.qhp文件并编写其内容如下

  1. <?xml version="1.0" encoding="GB2312"?>
  2. <QtHelpProject version="1.0">
  3. <namespace>software.help</namespace>
  4. <virtualFolder>doc</virtualFolder>
  5. <filterSection>
  6. <toc>
  7. <section title="首页" ref="htmlDocument/index.html">
  8. <section title="功能" ref="htmlDocument/function.html"></section>
  9. <section title="错误" ref="htmlDocument/error.html"></section>
  10. <section title="关于" ref="htmlDocument/about.html"></section>
  11. </section>
  12. </toc>
  13. <keywords>
  14. <keyword name = "功能" ref="htmlDocument/function.html"></keyword>
  15. <keyword name = "错误" ref="htmlDocument/error.html"></keyword>
  16. </keywords>
  17. <files>
  18. <file>htmlDocument/*.html</file>
  19. <file>imageDocument/*.jpg</file>
  20. <file>imageDocument/*.png</file>
  21. </files>
  22. </filterSection>
  23. </QtHelpProject>

提示:注意html文件路径及保存编码,否则会出现无法找到文件或者显示乱码的问题,修改html文件后需重新生成qch文件才会更新。

2.2 测试

不是必需用于验证,第三步中生成qhc文件时会一并生成qch文件

生成qch文件 

qhelpgenerator help.qhp -o help.qch

注册

assistant -register help.qch

显示

assistant

 

三、创建.qhcp文件并生成.qhc文件

3.1 文件建立

qhcp文件

Qt Help Collection Project的缩写,该文件是XML格式的,其主要作用是将qch二进制文件组织成为一个collection,定制客户化的Assistant。

qhc文件

由qhcp文件通过qcollectiongenerator命令生成的二进制文件,用于启动Assistant时获取指定collection参数。qhc文件中包含qch文件的集合,打开Assistant时,通过指定当前collection即可注册多个帮助文档。

创建help.qhcp文件并编写其内容如下

  1. <?xml version="1.0" encoding="GB2312"?>
  2. <QHelpCollectionProject version="1.0">
  3. <assistant>
  4. <title>帮助文档</title>
  5. <applicationIcon>imageDocument/robot.png</applicationIcon>
  6. <cacheDirectory>cache/help</cacheDirectory>
  7. <homePage>qthelp://software.help/doc/htmlDocument/index.html</homePage>
  8. <startPage>qthelp://software.help/doc/htmlDocument/index.html</startPage>
  9. <aboutMenuText>
  10. <text>关于</text>
  11. </aboutMenuText>
  12. <aboutDialog>
  13. <file>about.txt</file>
  14. <icon>imageDocument/robot.png</icon>
  15. </aboutDialog>
  16. <enableDocumentationManager>false</enableDocumentationManager>
  17. <enableAddressBar>false</enableAddressBar>
  18. <enableFilterFunctionality>false</enableFilterFunctionality>
  19. </assistant>
  20. <docFiles>
  21. <generate>
  22. <file>
  23. <input>help.qhp</input>
  24. <output>help.qch</output>
  25. </file>
  26. </generate>
  27. <register>
  28. <file>help.qch</file>
  29. </register>
  30. </docFiles>
  31. </QHelpCollectionProject>

提示:注意html文件路径及保存编码,否则会出现无法找到文件或者显示乱码的问题,修改html文件后需重新生成qhc文件才会更新。

生成qhc文件 

qcollectiongenerator help.qhcp -o help.qhc

3.2 测试

不是必需用于验证

注册并显示

assistant -collectionFile help.qhc

 

四、整合到程序中

创建C++ class类,命名为assistant。这里用到QProcess类,它是一个用来启动外部程序并与之通信的Qt类。

assistant.h文件

  1. #ifndef ASSISTANT_H
  2. #define ASSISTANT_H
  3. #include <QtCore/QString>
  4. class QProcess;
  5. class assistant
  6. {
  7. public:
  8. assistant();
  9. ~assistant();
  10. void showDocumentation(const QString &file);
  11. bool startAssistant();
  12. private:
  13. QProcess *proc;
  14. };
  15. #endif // ASSISTANT_H

assistant.cpp文件

  1. #include "assistant.h"
  2. #include <QtCore/QByteArray>
  3. #include <QtCore/QProcess>
  4. #include <QtWidgets/QMessageBox>
  5. assistant::assistant(): proc(0)
  6. {
  7. }
  8. assistant::~assistant()
  9. {
  10. if (proc && proc->state() == QProcess::Running)
  11. {
  12. // 试图终止进程
  13. proc->terminate();
  14. proc->waitForFinished(3000);
  15. }
  16. // 销毁proc
  17. delete proc;
  18. }
  19. // 显示文档
  20. void assistant::showDocumentation(const QString &page)
  21. {
  22. if (!startAssistant())
  23. return;
  24. QByteArray ba("SetSource ");
  25. ba.append("qthelp://software.help/doc/htmlDocument/");
  26. proc->write(ba + page.toLocal8Bit() + '\n');
  27. }
  28. // 启动Qt Assistant
  29. bool assistant::startAssistant()
  30. {
  31. // 如果没有创建进程,则新创建一个
  32. if (!proc)
  33. proc = new QProcess();
  34. // 如果进程没有运行,则运行assistant,并添加参数
  35. if (proc->state() != QProcess::Running)
  36. {
  37. QString app = QLatin1String("../software/helpdocument/assistant.exe");
  38. QStringList args;
  39. args << QLatin1String("-collectionFile")
  40. << QLatin1String("../software/helpdocument/help.qhc");
  41. proc->start(app, args); // 相当于执行命令:assistant –collectionFile myHelp.qhc
  42. if (!proc->waitForStarted())
  43. {
  44. QMessageBox::critical(0, QObject::tr("help"),
  45. QObject::tr("Unable to launch Qt Assistant (%1)").arg(app));
  46. return false;
  47. }
  48. }
  49. return true;
  50. }

打开帮助文档

  1. assistant *pAssistant;
  2. void MainWindow::on_helpButton_clicked()
  3. {
  4. //创建帮助文档
  5. pAssistant = new assistant;
  6. if(pAssistant->startAssistant())
  7. pAssistant->showDocumentation("index.html");
  8. else
  9. QMessageBox::warning(this, tr("警告"), tr("无法打开帮助文档"), QMessageBox::Abort);
  10. }

 

参考

https://www.cnblogs.com/Braveliu/p/5055387.html

https://doc.qt.io/archives/qt-4.8/assistant-custom-help-viewer.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/115063
推荐阅读
相关标签
  

闽ICP备14008679号