在Qt示例项目的C ++ / QML源中的//! [0]的含义是什么?

例如:  //! [0]

  1. GLWidget :: GLWidgetHelper * helperQWidget * parent
    QGLWidgetQGLFormatQGL :: SampleBuffers),parent),helperhelper
    {
    elapsed = 0;
    setFixedSize840400);
    setAutoFillBackgroundfalse);
    }
    //! [0]
  2. //! [1]
    void GLWidget :: animate()
    {
    elapsed =(elapsed + qobject_cast< QTimer *>(sender()) - > interval
    repaint();
    }
    //! [1]
  3. //! [2]
    void GLWidget :: paintEventQPaintEvent * event
    {
    QPainter painter;
    painter.beginthis);
    painter.setRenderHintQPainter :: Antialiasing);
    helper-> paint(& paintereventelapsed);
    painter.end();
    }
    //! [2]

解决方案

qdoc 语法

一、介绍什么是qdoc

Qdoc是开发者用于在软件工程中生成文档的一个工具。它从工程的源文件中提取qdoc类型注释,并以html页面或者DITA XML文档的形式格式化到文件中。Qdoc在.cpp和.qdoc文件中查找注释,而不会在.h文件中查找。一条qdoc注释往往以一个前置声明符号(!)开始。

二、使用qdoc的好处和缺点

优点:

a) 通过qdoc自动提取注释生成开发文档。

b) 在对外接口中可直接通过qdoc生成文档做接口文件,不用单独再写文档。

c) 将代码逻辑写到注释中,便于修改代码时修改。避免了之前单独出代码文档时修改代码忘记更新文档,造成文档代码不一致。

d) 支持多种格式输出,qch,html等格式,便于不同阅读方式。

缺点:

a)         必须按照qdoc的格式编写注释,并且注释必须与代码一致。

b)         Qdoc不能生成对私有函数注释输出(可通过修改源代码输出)。

c)         使用人数较少,网上文档较少,一般只能看官方文档。

三、创建Qdoc工程

1、 创建qoc的工程

添加空的qt工程,只需要pro文件,用于管理生成qch。

  1. #-------------------------------------------------
  2.  
  3. #
  4.  
  5. # Project created by QtCreator 2016-12-23 T15:22:06
  6.  
  7. # 备注: 对整个工程生成qch文件
  8.  
  9. #-------------------------------------------------
  10.  
  11. #创建一个Makefile,不构建任何东西。
  12.  
  13. TEMPLATE = aux
  14.  
  15. include(doc.pri)
  16.  
  17. # 生成qch文件需要添加此行
  18.  
  19. PRE_TARGETDEPS += qch_docs

说明

TEMPLATE = aux:用于设置当前工程不调用编译器来创建目标,仅使用makefile生成器。

PRE_TARGETDEPS += qch_docs:设置当前工程依赖qch_docs

2、添加qdoc的目录结构

Qdoc工程目录结构仿照官方qdoc目录进行生成.如图1.

图1

config:存放doc工程的配置文件,很重要。Qdoc的基础配置文件必须放到此目录下,否则会导致生成的qch文件中一堆的没用的链接。如图2。Image文件夹和style文件夹存放一些引用的图片和html样式。后面会用到。

图2

global:全局的配置文件,存放全局qdocconf文件,如一些格式的,源文件编码,生成文档编码,宏定义,源文件后缀配置等。这里面会有一个template目录,用于存放 引用的图片和html样式。可到qt源码下拷贝过来。如图3。

图3

html:生成的html文件目录,qmake以后生成html文件。通过浏览器可直接打开查看文档。如图4。

图4

Images :图片文件路径,文档中可引入图片,所以此目录存放图片。

Src:很重要,用于添加自定义的一些qdoc文件,用于生成doc中的模块文档,对某个模块的单独说明可添加独立的qdoc文件,进行详细描述,不用添加到代码中。此目录文件在qmake的时候会遍历每个qdoc文件进行添加。Index.qdoc很重要,用于添加主页的信息的。如图5.

图5

pri文件在3中介绍。

3、添加qdoc的必须配置文件

①   pri文件:用于添加各种设置,如qdoc的输出路径,执行命令等。可参看assistant中qmake Manual章节。

  1. #include($$_PRO_FILE_PWD_/target.pri)
  2. TargetName=doc
  3.  
  4. HELPGENERATOR = $$shell_path($$[QT_INSTALL_BINS]/qhelpgenerator) #-platform minimal
  5. QDOC_BIN = $$shell_path($$[QT_INSTALL_BINS]/qdoc)
  6. QDOC_PREPARE = $$QDOC_BIN -prepare
  7. QDOC_GENERATE = $$QDOC_BIN -generate
  8. QDOC_GLOBAL = QT_INSTALL_DOCS=$$[QT_INSTALL_DOCS]/src
  9. QDOC_INDEX_DIR=$$[QT_INSTALL_DOCS]
  10. #COMPAT =
  11.  
  12. defineReplace(cmdEnv) {
  13. !equals(QMAKE_DIR_SEP, /): 1 ~= s,^(.*)$,(set \\1) &&,g
  14. return("$$1")
  15. }
  16.  
  17. defineReplace(qdoc) {
  18. return("$$cmdEnv(SRCDIR=$$_PRO_FILE_PWD_../ OUTDIR=$$1 $$QDOC_GLOBAL) $$QDOC_BIN")
  19. }
  20.  
  21. PROJECT_PWD=$$PWD/../
  22. message($$PROJECT_PWD)
  23.  
  24. QHP_FILE = $$PROJECT_PWD/doc/html/$${TargetName}.qhp
  25. QCH_FILE = $$PROJECT_PWD/$${TargetName}.qch
  26.  
  27. doc_generate.TARGET = $$TargetName.qhp
  28. doc_generate.commands = $$QDOC_PREPARE $$PWD/config/$${TargetName}.qdocconf -outputdir $$PROJECT_PWD/doc/html \
  29. $$escape_expand(\n\t) $$QDOC_GENERATE $$PWD/config/$${TargetName}.qdocconf -outputdir $$PROJECT_PWD/doc/html
  30.  
  31. qch_docs.TARGET=$$TargetName.qch
  32. qch_docs.commands = $$HELPGENERATOR -o $$QCH_FILE $$QHP_FILE
  33. qch_docs.depends += doc_generate
  34.  
  35. QMAKE_EXTRA_TARGETS += doc_generate qch_docs
  36.  
  37. win32 {
  38. system(copy /y $$QCH_FILE $$PROJECT_PWD/)
  39. }

② qdocconf文件:为了生成文档,QDoc使用带有qdocconf扩展名的配置文件来存储配置设置.主要配置项目名称,输入输出路径,宏,版本号等信息。config目录下的doc.qdocconf.主要是针对当前工程进行设置的,global下的主要是通用的。

  1.  
  1. #自定义conf文件, 这里使用的是Qt提供的。
  2. include(../global/qt-module-defaults-offline.qdocconf)
  3. #此文件里面写了编码的格式,所以需要修改此里面的编码才有效
  4. include(../global/fileextensions.qdocconf)
  5. #此文件配置输出的html格式
  6. include(../global/qt-html-templates-offline.qdocconf)
  7.  
  8. #项目
  9. #project = doc
  10. #项目名称
  11. description = doc项目
  12. #版本号
  13. version = 1.0
  14.  
  15. #Qt 版本号, 可以定义自己的版本号,这是是为了使用以下Qt提供的conf文件
  16. QT_VER=1.0
  17.  
  18. #所依赖的模块
  19. depends += \
  20. qtcore \
  21. qtnetwork \
  22. qtwidgets \
  23. qmake \
  24. xml
  25.  
  26. #头文件路径
  27. headerdirs +=.. \
  28. ../src \
  29. ../../doc \
  30.  
  31. #源代码路径
  32. sourcedirs = .. \
  33. ../src \
  34. ../../doc \
  35.  
  36. outputformats=HTML
  37.  
  38. #工程整体信息, 包括文件名、工程名、注册时的名称空间
  39. qhp.projects = doc
  40. qhp.doc.file = doc.qhp
  41. qhp.doc.namespace = com.doc.1.0
  42.  
  43. #在Qt assistant 内容tab页的展示信息
  44. qhp.doc.virtualFolder = doc
  45. qhp.doc.indexTitle = doc项目
  46. #qhp.doc.indexRoot =
  47.  
  48. qhp.doc.subprojects = classes
  49. qhp.doc.subprojects.classes.title = C++ Classes
  50. qhp.doc.subprojects.classes.indexTitle = C++ Classes
  51. qhp.doc.subprojects.classes.selectors = class fake:headerfile
  52. qhp.doc.subprojects.classes.sortPages = true
  53.  
  54. #unknown
  55. qhp.doc.filterAttributes = doc
  56. qhp.doc.customFilters.doc.name = doc111111
  57. qhp.doc.customFilters.doc.filterAttributes = doc222222
  58.  
  59. #首页 此处使用的是title 用的是index.qdoc中的title,不使用title无法正常连接
  60. navigation.homepage = "doc Project"
  61. #navigation.landingpage = "doc"
  62. navigation.cppclassespage = "C++ Classes"
  63.  
  64. #输出路径, 注意在include 的conf文件中, 可能定义路径, 因此这里使用相对路径, 未必指向“当前路径”。
  65. outputdir = ../html
  66.  
  67. #图片路径
  68. imagedirs = ../images
  69.  
  70. #需要的图片
  71. #HTML.extraimages += image/111.jpg
  72.  
  73. #把图片编译到 qhp文件中
  74. #qhp.extraFiles += image/111.jpg
  75.  
  76. #tag文件,必需
  77. tagfile = ../doc.tags

4、添加一些基本的qdoc文件,用于进行添加页面,添加模块说明或模块划分

Qdoc文件主要用于添加一些说明文档,添加新页面,如某个模块的独立说明,或者需要在qdoc中列出所有的方法,所有的类,或自己指定的需要输出的列表等,都可在src目录下添加qdoc文件。此处需要重点说明的是,需要添加index.qdoc文件,此文件中需要添加index.html的页面,用于根节点的显示如下:

  1. /*!
  2.  
  3. \page index.html
  4.  
  5. \keyword doc Reference Documentation
  6.  
  7. \title doc project
  8.  
  9. 介绍项目XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  10.  
  11. */

5、生成qch/html文件

添加完基础文件和配置文件,即可生成qch文件了,在pro项目上右键,qmake,即可生成对应的qch文件。

6、使用qch文件

1、  直接打开html目录,查看。

2、  通过assistant导入使用。参见:使用qch文件。http://www.cnblogs.com/ll965452300/p/6721493.html

四、踩过的坑

1、编码问题:因为qdoc支持设置源码的编码和输出文档的编码,global/fileextensions.qdocconf中会有三个编码设置:

Naturallanguage:qdoc生成的文档使用的自然语言。包含汉子的话一般改为zh-Hans。默认为en。

Outputencoding:由qdoc生成的文档的编码。即src目录下那些文件输出的文档编码。UTF-8即可。

Sourceencoding:源代码和文档的编码。此处就是一大坑,如果qt creater中设置的gbk,此处一定要设置为GBK,如果是UTF-8那也要设置一样,并且源码文档一定要保持一个编码,否则怎么修改都会导致生成文档出现乱码。有时候出现qmake的时候报错也可能是编码问题导致。

2、assistant中doc节点为空:需要在doc.qdocconf中添加navigation.homepage = "doc Project",并且需要在index.qdoc中的title也写为“doc Project”,因为在查找的时候使用的是title去连接的,所以必须修改为一致。

五、qdoc翻译文档

在Qt示例项目的C ++ / QML源中的//! [0]的含义是什么?的更多相关文章

  1. 如何在maven项目的pom.xml文件中添加jar包

    在使用maven进行项目开发时,我们需要在pom.xml文件中添加自己所需要的jar包.这就要求我们获取jar包的groupId和artifactId. 我们可以在一些maven仓库上搜索我们所需要的 ...

  2. 理解maven项目的pom.xml文件中,<scope>标签的作用——作用域以及依赖传递

    问题介绍: 在maven项目中,最关键的就是pom.xml这个文件,这个文件是用来导入maven项目依赖的jar包以及一些插件等. 在这个文件中导入jar包使用的标签是<dependency&g ...

  3. 【Devops】【docker】【CI/CD】Jenkins源码管理,设置gitlab上项目的clone地址 + jenkins构建报错:Please make sure you have the correct access rights and the repository exists.

    注意,如果 jenkins构建报错:Please make sure you have the correct access rights and the repository exists. 而此时 ...

  4. 单元测试Struts2Spring项目的Action和Service(包含源码)

    最近,认真实践了单元测试Struts2.Spring等Java项目,今天特意写的是单元测试Struts2Spring项目的Action和Service. 由于已经写过不少Web开发框架单元测试的代码, ...

  5. 搜刮一些开源项目的APP

    iOS完整App资源收集 <iOS完整app资源收集>  <GitHub 上有哪些完整的 iOS-App 源码值得参考?> <GitHub 上有哪些完整的 iOS-App ...

  6. 应用集成-在Hexo、Hugo博客框架中使用Gitalk基于Github上仓库项目的issue无后端服务评论系统实践

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 本章目录 目录 0x00 Gi ...

  7. Unity中加入Android项目的Build步骤

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 简介: 有的项目需要在Android中加入Unity功能,例如ANDROID应用中嵌入Un ...

  8. qt 学习之路 :QML 语法

    前面我们已经见识过 QML 文档.一个 QML 文档分为 import 和对象声明两部分.如果你要使用 Qt Quick,就需要 import QtQuick 2.QML 是一种声明语言,用于描述程序 ...

  9. Qt 学习之路:QML 和 QtQuick 2

    前面我们已经了解了 Qt 的一部分内容.这部分内容全部集中在 C++ 方面.也就是说,至今为止我们的程序都是使用 C++ 语言完成的.这在 Qt 5 之前的版本中是唯一的途径.不过,自从 Qt 5 开 ...

随机推荐

  1. 【LOJ】#6289. 花朵

    题解 我当时连\(n^2\)的树背包都搞不明白,这道题稳稳的爆零啊= = 然后听说这道题需要FFT--我当时FFT的板子都敲不对,然后这道题就扔了 然后,我去考了thusc--好吧,令人不愉快的经历, ...

  2. pyqt5之QColorDialog颜色对话框最简单使用

           设置窗体背景颜色 QWidget.setStyleSheet('QWidget {background-color:#88ab45}') 颜色对话框取得颜色值是十六进制. col=QCo ...

  3. bzoj 1100

    思路:好脑洞啊... 把边和角转化为字符串,然后用反串跑kmp... #include<bits/stdc++.h> #define LL long long #define fi fir ...

  4. 七牛刷新接口PHP实现

    <?php require_once '../autoload.php'; use Qiniu\Auth; use Qiniu\Http\Client; $accessKey = 'access ...

  5. python沙盒逃逸

    前言 最近遇到了很多python沙盒逃逸的题目(不知道是不是因为现在python搭的站多了--),实际使用时发现只会复制别人的payload是不够用的,于是自己来总结一波(顺带一提python沙盒逃逸 ...

  6. 浅谈三款常用软件 - Chrome、Intellij IDEA、Cygwin

    作为一个每天的接触计算机的程序员,肯定也会接触形形色色的软件,不过今天在此介绍的三款软件,则是我每天都要用到的,而且我认为它们非常好用,极大的提高了我的开发效率. 1.Chrome Google的大名 ...

  7. TensorFlow——module 'tensorflow' has no attribute 'xxx'

    tf.sub()更改为tf.subtract() tf.mul()更改为tf.multiply() tf.types.float32更改为tf.float32 tf.pact()更改为tf.stact ...

  8. Web API 自定义文件内容的定制类

    public class FileContent : HttpContent { private readonly Stream _stream; public FileContent(string ...

  9. QT学习笔记1:VS2015配置QT5.11

    由于工作关系,我又接触到了QT,在之前写过一篇博客是 在vs2017下配置openCV,当时用的是2015做的示范,现在就继续记录一下在VS2015下配置QT吧(VS2017配置是一样的) 第一部分: ...

  10. 网络流24题之最长k可重线段集问题

    对于每个线段拆成两个点,如同之前一样建图,由于可能出现垂直于x轴的 所以建图由i指向i~ 继续最小费用最大流 By:大奕哥 #include<bits/stdc++.h> using na ...