Qt的Assistant制作自定义的软件帮助界面(记录)

2023-11-01

      首先,需要编写好需要展示的html文档,作为Assistant显示的帮助文档,未提高效率,选择用VSCode配合Live server插件,编写html文档。(VSCode配合Live Server真好用~_~)

                                    

目录结构如下所示:

 CSS目录中存放html文件的css样式,Documents存放html文档,pictures存放html中引用的图片:

book1.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="../CSS/book1.css">
</head>
<body>
    <div class="outer">
        <div class="header-area">
            <div class="picture-area">
                <img src="../pictures/book1.jpg" alt="">
            </div>
            <div class="book-name">
                <p>红岩</p>
            </div>
        </div>
        <div class="info-table">
            <table border="1" cellspacing="3" cellpading="5">
                <caption>书籍.红岩</caption>
                <thead>
                    <tr align="center" valign="center">
                        <th>书名</th>
                        <th>作者</th>
                        <th>出版时间</th>
                        <th>价格</th>
                        <th>好评度</th>
                    </tr>
                </thead>
               <tbody>
                   <tr align="center" valign="center">
                        <td>Hongyan</td>
                        <td>Lisan</td>
                        <td>1994.6.6</td>
                        <td>¥10</td>
                        <td>90%</td>
                   </tr>
                   <tr align="center" valign="center">
                        <td>红岩</td>
                        <td>张三</td>
                        <td>1994年</td>
                        <td>$6</td>
                        <td>94%</td>
                   </tr>
               </tbody>
            </table>
        </div>
        <div class="summary-area">
            <p>
                文字是人类用符号记录表达信息以传之久远的方式和工具。现代文字大多是记录语言的工具。
                人类往往先有口头的语言后产生书面文字,很多小语种,有语言但没有文字。文字的不同体现了国家和民族的书面表达的方式和思维不同。
                文字使人类进入有历史记录的文明社会。
            </p>
        </div>
    </div>
</body>
</html>

 简单的样式book1.css

div.summary-area
{
    width: 40%;
    height: 120px;
    background-color: antiquewhite;
    align-content: center;
}

div.summary-area p
{
    font-size: 15px;
}

div.outer
{
    width: 65%;
    margin-top: 40px;
}

div.header-area
{
    margin-left: 35px;
    line-height: 65px;
    display: flex;
}

div.book-name
{
    vertical-align: center;
    line-height: 65px;
}

div.book-name p 
{
    font-weight: bold;
    font-size: 20px;
}

div.info-table table
{
    margin-left: 25px;
}

           按照重复的样式新建5个相同的html文件,后期为突出目录结构使用,同时,新建一个简单的index.html作为首页使用:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>首页</title>
    <link rel="stylesheet" href="../CSS/index.css">
</head>
<body>
    <div class="outer">
        <div class="img-area">
            <img src="../pictures/index.jpg" alt="">
        </div>

        <div class="text-area">
            <p>Welcome to the homepage</p>
        </div>
    </div>
</body>
</html>

index.css样式文件:

div.img-area img
{
    height: 150px;
    width: 165px;
    margin-left: 26px;
}

div.outer
{
    margin-top: 30px;
    margin-left: 50px;
}

div.text-area
{
    margin-top: 10px;
    height: 40px;
}

div.text-area p
{
    line-height: 40px;
    font-weight: bold;
}

在编写好基本的html文件之后,需要进行Qt Assistant的相关文件的编写。

其中需要编写两个重要的文件,分别是.qhp文件以及.qhcp文件,分别介绍这两个文件的作用:

1. qhp文件,qhp指Qt Help Project的缩写,格式为xml格式(注意在编写xml文件的时候,一定要保持文件的格式正确),其主要的作用是负责组织Assistant中       需要用到的文档(即前面编写的html文件),其格式如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<QtHelpProject version="1.0">
	<namespace>ApplicationHelp</namespace>
	<virtualFolder>doc</virtualFolder>
	<filterSection>
		<toc>
			<section title="Simple Application Help" ref="Documents/index.html">
				<section title="第一章 介绍">
					<section title="Book1 Detail" ref="Documents/book1.html"/>
					<section title="Book2 Detail" ref="Documents/book2.html"/>
				</section>
				<section title="第二章 书籍">
					<section title="Book3 Apply" ref="Documents/book3.html"/>
					<section title="book4 Apply" ref="Documents/book4.html"/>
				</section>
				<section title="第三章 应用">
					<section title="Book5" ref="Documents/book5.html"/>
					<section title="Book4" ref="Documents/book4.html"/>
				</section>
			</section>
		</toc>
		<keywords>
			<keyword name="index" ref="Documents/index.html"/>
			<keyword name="book1" ref="Documents/book1.html"/>
			<keyword name="book2" ref="Documents/book2.html"/>
			<keyword name="book3" ref="Documents/book3.html"/>
			<keyword name="book4" ref="Documents/book4.html"/>
			<keyword name="book5" ref="Documents/book5.html"/>
		</keywords>
		<files>
			<file>Documents/*.html</file>
			<file>CSS/*.css</file>
			<file>pictures/*.jpg</file>
		</files>
	</filterSection>
</QtHelpProject>


(1)encoding指编码,如果需要使用中文,需指定为GB2312,如果只有英文,可指定为UTF-8格式的编码。

(2)namespace指qhp文件的命名空间,qhp文件的命名空间必须是唯一的,这个命名空间在Assistant中会作为页面URL的第一部分。

(3)virtualFolder指定虚拟文件夹,此文件夹并不需要创建,只用来区分文件。

(4)filterSection指过滤器。过滤器部分包含了所有的目录,索引和文件列表,可以通过设置过滤器属性,实现在Assistant中指定文档是否显示。

(5)toc指 table of contents,表示目录表,在toc中创建了所有文档的目录,标题,以及文档对应的路径。

(6)keywords用于指定所有搜索的关键字以及指定的文件。在Assistant中进行搜索的时候,会显示相应的页面。

(7)files中包含了Assistant需要引用的所有的文件,图片,可使用通配符来表示。

在编写好qhp文件之后,需要对qhp文件转化为qch文件,才能被Assistant识别。qch是指Qt Compressed Help,为二进制格式的文件,是Assistant能够识别的最小单元。可通过命令

 qhelpgenerator src.qhp -o dest.qch

来生成qch文件,在生成qch文件之后,需要进行注册才能够在Assistant中进行文档的浏览。注册的方法有两种:

第一种:命令行方法 assistant -register dest.qch来进行注册。

第二种:在Assistant中,编辑-->首选项-->文档标签页-->添加/移除

通过上述方法,已经能够在Assistant中显示已经注册的文档。

如果需要在Assistant中仅仅显示我们自己编写的文档,则需要进行一些定制化的操作。

如果需要定制客户化的Assistant,则需要编写qhcp文件,qhcp指Qt help collect project的缩写,文件的格式是xml文档,起主要作用是将二进制文件qch组织成一个collect.

qhcp文件的格式如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<QHelpCollectionProject version="1.0">
	<assistant>
		<title>Application Help</title>
		<startPage>qthelp://ApplicationHelp/doc/Documents/index.html</startPage>
		<homePage>qthelp://ApplicationHelp/doc/Documents/index.html</homePage>
		<applicationIcon>pictures/icon.jpg</applicationIcon>
		<enableFilterFunctionality>false</enableFilterFunctionality>
		<enableDocumentationManager>false</enableDocumentationManager>
		<enableAddressBar visible="true">true</enableAddressBar>
		<cacheDirectory>cache/data</cacheDirectory>
		<aboutMenuText>
			<text>About</text>
		</aboutMenuText>
		<aboutDialog>
			<file>Documents/about.txt</file>
			<icon>pictures/about.jpg</icon>
		</aboutDialog>
	</assistant>
	<docFiles>
		<generate>
			<file>
				<input>ApplicationInst.qhp</input>
				<output>ApplicationInst.qch</output>
			</file>
		</generate>
		<register>
			<file>ApplicationInst.qch</file>
		</register>
	</docFiles>
</QHelpCollectionProject>

(1)assistant标签中的内容是对Assistant进行一些定制化的操作,包括外观与功能,如标题,图标,缓存目录,主页,起始页,about菜单文本/对话框内容/图标。

(2)cacheDirectory表示缓存目录,在Assistant中进行全文检索时会将缓存文件放在指定的缓存目录中。

(3) startPage/homePage分别是设置Assistant的起始页和home页,这里用到Assistant页面的URL,URL的构成格式为:

qthelp://namespace(qhp文件中指定的)/doc(qhp文件中指定的虚拟文件夹)/*html

(4)Assistant可以添加或者删除文档来为多个应用程序提供帮助文档,主要依赖靠文档管理器document mamager,地址栏adress bar, 过滤器filter functionality来实现,这些功能暂时用不到,因此先关闭。

(5)About用于设置跟“关于”菜单以及对话框相关的内容,包括菜单文本,帮助对话框显示内容,图标等信息。

(6)docFiles完成文件的转换以及注册功能。

编写好qhcp文件之后,通过qcollectgenerator将qhcp文件转化为qhc文件,qhcp文件也为二进制文件,在启动assistant的时候,需要指定当前的qch文件,实现文档的注册。

在Qt中通过代码方式调用Assistant:

void ICMainWindow::slotShowInstructionBook()
{
	// 此处自定义一个说明文档,借助Qt中的assistant
	if (!m_processor)
	{
		m_processor = new QProcess();
	}

#ifdef WIN32
	// windows版本
	QString appDir = QCoreApplication::applicationDirPath();
	appDir.replace("\\", "/");
	appDir = appDir.left(appDir.indexOf("x64/Debug"));
	appDir = appDir.endsWith("/") ? appDir : appDir.append("/");

	QString cmd = appDir + "QtApp/qcollectiongenerator.exe";

	QStringList args;
	args << appDir + "doc/ApplicationInst.qhcp";

	if (m_processor->state() == QProcess::Running)
	{
		m_processor->waitForFinished();
	}

	m_processor->start(cmd, args);
	m_processor->waitForFinished();

	QString cmdAssistant = appDir + "QtApp/assistant.exe";
	args.clear();

	QString docPath = appDir + "doc/ApplicationInst.qhc";
	QFile docfile(docPath);
	if (!docfile.exists())
		return;

	QString url("qthelp://ApplicationHelp/doc/Documents/index.html");

	args << "-enableRemoteControl"; 
	args << "-collectionFile";
	args << docPath;
	args << "-showUrl";
	args << url;
	//args << "-hide" << "search";
	//args << "-hide" << "bookmarks";

	if (m_processor->state() == QProcess::Running)
	{
		QMessageBox::warning(this, tr("Warning"), tr("The Process is running, please wait for finished"));
		return;
	}

	m_processor->start(cmdAssistant, args);
	
	if (!m_processor->waitForStarted(5000))
	{
		return;
	}
	
#elif
	// linux版本
#endif
	
}

调用效果如下所示:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt的Assistant制作自定义的软件帮助界面(记录) 的相关文章

  • 【华为OD机试c++】解压报文【2023 B卷

    题目描述 为了提升数据传输的效率 会对传输的报文进行压缩处理 输入一个压缩后的报文 请返回它解压后的原始报文 压缩规则 n str 表示方括号内部的 str 正好重复 n 次 注意 n 为正整数 0 lt n lt 100 str只包含小写
  • 猿创征文

    文章目录 1 KingbaseES是什么数据库 2 KingbaseES数据库产品优势 3 KingbaseES安装包下载地址 4 KingbaseES数据库安装 1 windows安装KingbaseES 1 图形化界面安装 2 命令行安
  • Java构造方法为private

    class A public String name 构造函数限定为private 不可以直接创建对象 private A 需要创建对象实例时 调用此函数 public static A Instance return new A clas
  • H.323协议分析

    感谢原作者 http blog csdn net bripengandre article details 2230087 整理记录 版本 时间 内容 整理人 V1 0 2008 03 28 H 323协议分析初稿 彭令鹏 H 323协议分
  • Vue 新手学习笔记:vue-element-admin 之入门开发

    说实话都是逼出来的 对于前端没干过ES6都不会的人 vue视频也就看了基础的一些 但没办法 接下来做微服务架构 前端就用 vue 这块你负责 说多了都是泪 脚手架框架布了都没看过 干就完事 不过好在做好了 这里写下给和我一样苦逼的同学能快点
  • 写技术文的三个原则是什么?

    本文章原创首发于公众号 编程三分钟 我关注了很多技术类的公众号 看着大佬的公众号几千的阅读量 甚是羡慕 这直接导致了我没有心情减肥 甚至多吃了一个鸡腿 要怎么才能写出一篇好技术文章 让读到的人感到身心舒畅 快速Get到想说的点 我想破了脑袋
  • Jetpack架构组件库:DataStore

    Jetpack DataStore 是一种经过改进的新数据存储解决方案 旨在取代 SharedPreferences DataStore 基于 Kotlin 协程和 Flow 构建而成 提供以下两种不同的实现 Preferences Dat
  • 【解决方法】chrome和edge浏览器出现“你的连接不是专用连接“的问题

    原创作者 运维工程师 林琪 1 问题描述 chrome和edge浏览器访问一些证书不受信任的网页会出现 你的连接不是专用连接 的问题 无法继续访问网页 2 解决方法 在上图这个问题界面的时候 输入法在英文状态下 输入 thisisunsaf
  • ByteBuffer之HeapByteBuffer与DirectByteBuffer

    HeapByteBuffer HeapByteBuffer 是写在jvm堆上面的一个buffer 底层的本质是一个数组 用类封装维护了很多的索引 limit position capacity等 在实际操作时 会把jvm堆上数据拷贝出来到系
  • WSL2+Ubuntu18.04+gnome图形界面+docker搭建开发环境

    最近换了电脑 系统更新到2004 捣腾了一下WSL2 尝试把开发环境搭建在WSL2里面 看了很多教程 基本都是Xfce的 但是更喜欢Gnome 所以就用Ubuntu主流的Gnome作为桌面GUI WSL2的安装 WSL 2的安装因为微软提供
  • VS2015和QT代码快捷键

    VS2015 代码自动对齐快捷键 1 Ctrl A 2 Ctrl K 3 Ctrl F QT 代码自动对齐快捷键 1 Ctrl A 2 Ctrl I
  • 专利交底书

    qq
  • Java在Quant应用_BigQuant人工智能量化平台使用

    BigQuant人工智能量化平台使用 BigQuant人工智能量化平台使用 Author By Runsen 在2020年一月初 也是我大三上的寒假 我开始写书 为什么呢 因为化工原理和化工热力学挂了 我需要重拾自己的自信 对于一个大学三年
  • 今天和朋友们分享如何巧用MACD指标进行恒指多空方向判断

    说起MACD指标 我们无论是做股票还是期货的朋友其实都有了解 之前也有相关文章专做分析过此指标的一些妙用 今天受一些朋友建议 均已将带领大家重温 MACD 指标课堂 今日课题主要同大家讲解一下 MACD柱线与0轴位置切换 以及MACD变化过
  • 渗透测试技术题(面试、笔试)

    本篇文章主要涉及一下几个方面 java view plain copy 对称加密非对称加密 什么是同源策略 cookie存在哪里 可以打开吗 xss如何盗取cookie tcp udp的区别及tcp三次握手 syn攻击 证书要考哪些 DVW
  • python13个小题

    python小题 1 从键盘输入3个数 求最大值 2 买彩票 如果体彩中了500万 我买车 资助希望工程 去欧洲旅游 否则我买下一期体彩 继续烧高香 写程序描述 3 会员购物时 根据积分的不同享受不同的折扣 计算会员购物时获得的折扣 小于2
  • Linux PXE详解

    今天我们继续给大家介绍Linux相关内容 本文主要内容是PXE系统的部署 并且通过实战 完成PXE环境的实战部署 由于PXE环境牵扯到的服务众多 因此 您需要了解FTP DHCP等服务的原理 安装 部署等知识 如果您对此还存在困惑 欢迎查阅
  • Jtti:Linux大文件重定向和管道的效率哪个更高

    在Linux中 重定向和管道是不同的工具 用于不同的任务 它们的效率也取决于具体的使用情况 让我们比较一下它们的特点和效率 重定向 特点 重定向是将命令的输出写入文件或设备的过程 它通常用于将命令的输出保存到文件中或将输入从文件中读取 重定

随机推荐

  • 交易系统模块划分,模块拆分,设计,重构实战.状态

    父文章 技术设计金字塔 包含了实体设计文章 相关文章 如何梳理和重构 含复杂性度量 相关文章 代码级 如何写可维护的代码 万物ddd ddd primitive 封装 对象来实现可维护代码 个人渣记录仅为自己搜索用的博客 CSDN博客 dd
  • docker如何搭建Kafka

    1 介绍 Kafka是一个分布式流处理平台 用于高吞吐量 低延迟的数据传输和处理 一般是用做分布式系统的消息中间件 2 前提概要 阅读本章博客之前 你至少需要满足以下条件 电脑已经安装过docker 已经使用docker搭建了zookeep
  • 【Java SE】return的用法(快速扫盲)

    点进来你就是我的人了博主主页 戳一戳 欢迎大佬指点 欢迎志同道合的朋友一起加油喔 目录 前言 1 定义 2 return的用法 3 break和return的区别 前言 此篇帮助不理解return用法的小伙伴们快速扫盲 1 定义 retur
  • 分布式光伏消纳的微电网群共享储能配置策略研究——Matlab代码复现

    目录 摘要 研究背景 共享储能参与微能源网新能源消纳模式 共享储能电站容量功率配置原则 Matlab算例运行结果 编辑 Matalb代码 数据分享 摘要 共享储能是可再生能源实现经济消纳的解决方案之一 在适度的投资规模下 应尽力实现储能电站
  • mocha如何实现异步测试

    异步测试 用mocha测试一个函数是非常简单的 但是 在JavaScript的世界中 更多的时候 我们编写的是异步代码 所以 我们需要用mocha测试异步函数 我们把上一节的hello test工程复制一份 重命名为async test 然
  • 如何面对基金下跌时的失落感?

    你知道追高 almost All in式入市 转眼被市场放倒在地上摩擦 资产被套牢 最深处超20 时间跨度达2 3年之久 是种什么样的体验吗 我知道 大家好 我是睿齐 一个奋斗在实现财富自由一线的打工者 3 4年之前 作为一只涉 市 未深的
  • 设计模式精讲-工厂方法模式

    设计模式精讲 工厂方法模式 模式定义 实战说明 简单工厂实现 不是设计模式 工厂方法 应用场景 主要优点 源码中的应用 模式定义 定义一个用于创建对象的接口 让子类决定实例化哪一个类 Factory Method 使得一个类的实例化延迟到子
  • 学习笔记-BNF、EBNF、ABNF语法格式描述规范

    目标是确认一些c cpp的语法细节 需要看cpp语法定义文件 考虑从c的语法定义文件开始确认 考虑实现一个简化的语言定义和编译器 为后续的实际需求做自定义扩展 参考网页 https en wikipedia org wiki Extende
  • 协议RFC对应表

    协议层次 协议缩写 协议英文全称 协议中文名 RFCApplication LayerCOPS Common Open Policy Service 公共开放策略服务 RFC 2748FANP Flow Attribute Notifica
  • 电感饱和如何解决?

    项目场景 在BOOST双闭环实验时 进行电流采样时 出现了饱和现象 问题描述 第四通道为电感电流 波形峰值时非常尖锐 可见电流饱和 原因分析 前提理论分析是没有问题 1 电感值过小 可能性不大 2 匝数绕得比较少 解决方案 重新绕制一个电感
  • 【LoRa】【BLOOMZ】用peft训练bloomz保存检查点,保存和加载的权重不一致???adapter_model.bin只有4kb???

    最近用peft的lora对bloomz做训练 参考的https github com linhduongtuan BLOOM LORA 训练了1轮后发现 结果没有任何变化 用几个检查点做了测试结果也是没有任何变化 我的神经病一触即发 能看到
  • 重学java-IDEA安装(免费)

    重学java IDEA安装 免费 jetbrains公司的IDEA和Pycharm是目前非常受欢迎的两款IDE 集成开发环境 分别对应着java语言和python语言 同时这两款产品的专业版均是收费的 仅仅只有社区版是免费的 收费的版本功能
  • java正则表达式双引号_java正则表达式去掉双引号

    java正则表达式去掉双引号 2021 02 03 02 02 39 简介 php正则表达式去掉html的方法 首先使用 htmlspecialchars decode 将特殊的HTML实体转换回普通字符 然后通过正则表达式 preg re
  • 用计算机运算十进制,计算机运算乘法首先十进制转二进制就不用讨论了……问下计算机计算乘法的时候如3*3是直接计算3*3还是计算3+3+3?如12*12是12加12次还是12*10+12*2?据说最后还是...

    最佳答案 我模拟CPU运算乘法的步骤给你看好了 并不是像楼上的那么算的 假设计算3 3 原码是0011 0011 以4位存贮单元 因为是原码 最高位不代表符号位 CPU中的乘法器过程如下 3个寄存器分别存放乘数0011 被乘数 0011 一
  • 在B站上有哪些比较好的MATLAB方面的课程可以推荐,并给出相应的链接

    在 B 站上有很多讲解 MATLAB 的课程 以下是一些比较受欢迎的课程 MATLAB入门到精通 https www bilibili com video BV1sJ41127Qv MATLAB深入浅出 https www bilibili
  • node解码视频流,调用海康视频摄像头

    node 后端使用 rtsp relay 推流 前端jsmpeg解码 实现网页接入视频功能 能同时实现多个 后端 const express require express const app express const proxy req
  • Windows下pyenv安装教程

    1 从github上下载pyenv源码 pyenv win pyenv win pyenv for Windows pyenv is a simple python version management tool It lets you e
  • knime 大数据_如何使用Knime进行数据科学

    knime 大数据 Knime K是无声的 因此发音为n m 是一个高度评价的数据分析平台 具有广泛的适用性 并且与其他产品 例如与数据库 语言 机器学习框架和深度学习框架 进行了许多集成 Knime的理念是包容性 并 融合 您要使用的任何
  • RGB与YUV格式详解

    一 RGB RGB是最常见的一种颜色编码格式 它的三个通道 R G B分别对应红 绿 蓝三个分量 通常每个分量的位宽为8bit 值的范围是0 255 对应其256个灰阶 也即颜色的亮度 值越大表示该分量越亮 也即颜色越浅 红绿蓝这三个分量都
  • Qt的Assistant制作自定义的软件帮助界面(记录)

    首先 需要编写好需要展示的html文档 作为Assistant显示的帮助文档 未提高效率 选择用VSCode配合Live server插件 编写html文档 VSCode配合Live Server真好用 目录结构如下所示 CSS目录中存放h