Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.

Writing Qt Documentation

From Qt Wiki
Revision as of 14:44, 23 February 2015 by Maintenance script (talk | contribs)
Jump to navigation Jump to search


[toc align_right="yes" depth="3"]

Writing Qt Documentation

This document contains some documentation style guidelines that have been used when documenting Qt over the past few years.

It may be helpful to refer to the online "qdoc manual":http://doc.qt.digia.com/qdoc.

See Building_Qt_Documentation for instructions on the usual way to build the Qt documentation.

See Troubleshooting Qt Documentation for advice on what to look for if your documentation is not processed correctly by qdoc.

See "Developing Qt Documentation":http://wiki.qt.io/Category:Developing_Qt::Documentation for information about the documentation process.
h2. API documentation

General

  • Write complete sentences for items in lists.
  • Use only real URLs if absolutely necessary, otherwise use "http://example.com". Use documents to create fake pages for external documents that you can refer to by title.
  • Indent using spaces, not tabs.

Use of language

  • Hyphenation is not normally needed nor used.
  • Shorthand is discouraged.
    • For example, "and" should be used in preference to "&" unless there is a very good reason.
  • Each word in a title (either a page title or a section title) should start with an upper case letter, except for the "most common prepositions":http://en.wikipedia.org/wiki/Preposition (of, to, in, for, with and on) and "coordinating conjunctions":http://en.wikipedia.org/wiki/Grammatical_conjunction (for, and, nor, but, or, yet, and so).
    • For example, "Anchor Margins and Offsets" not "Anchor margins and offsets" (lower case is wrong) or "Anchor Margins And Offsets" ("and" should be lower case).

Overview/modules

  • Shows/describes how classes in the module are used together.
  • Describes the main concepts and features of groups of classes.

Class descriptions

  • Brief overview
  • Start the main body of text with something like, "A <plain language name&gt; is a…"
  • Alternative classes, e.g.
    • <code&gt;QTable&lt;/code&gt; / <code&gt;QListView&lt;/code&gt;
    • <code&gt;QListBox&lt;/code&gt; / <code&gt;QComboBox&lt;/code&gt;
    • <code&gt;QDial&lt;/code&gt; / <code&gt;QSlider&lt;/code&gt; / <code&gt;QSpinBox&lt;/code&gt;
  • Patterns of use
    • Minimal
    • Realistic: quotes from snippets in the doc directory, and examples in the qt/examples directory
  • Concepts; e.g.
    • <code&gt;QTextEdit&lt;/code&gt;: lines vs. paragraphs
    • In Qt 3, <code&gt;QCanvas&lt;/code&gt; is abstract; <code&gt;QCanvasView&lt;/code&gt; actually displays the canvas
  • Details
    • Describes and groups together functions with common features

Some examples of Qt documentation:

I'm sure I haven't found the "best&quot; examples of documentation. These are just a few cases that I didn't consider to be in need of radical improvement.

The guidelines I learned basically followed the "pyramid&quot; approach of providing a bit of simple information, then some more detailed information, followed by even more complex information about each class.

  1. Describe what the class is/does.
  2. Refer the reader to other relevant classes or documents describing the concepts.
  3. Show a simple use case, if possible.
  4. Describe the features, beginning with the simplest, most commonly used ones, showing relevant, simple code snippets. Try to group these into categories.
  5. Describe more complex features that may involve interaction with other classes.
  6. Discuss subclassing if relevant, and describe what the developer needs to take care of when doing this.
  7. Put links to relevant documents, perhaps in a section of their own, but at least in a see-also line at the end of the detailed description.

There should, of course, be links to functions/methods and other classes throughout. Images are also good to include, either in terms of showing what a widget looks like or to illustrate a concept.

Function descriptions

  • <code&gt;</code&gt; descriptions:
    • Property descriptions should start with a lower case letter and have no ending period.
    • Class descriptions should be complete sentences.
  • Constructors should read something like, "Constructs the … with the given parent."
  • Introduce arguments/parameters using the following two phrases:
    • … is specified by …
    • … in the given …
  • Do not use
    • … is given by …

Use of parameter names

Don't use natural language phrases that make the operation ambiguous:

<br />void Treasure::setValue(SomeClass *value)<br />

Sets the value of the treasure.

It would be better to write something explicit:

Sets the value of the treasure to value.

The above use relies on a coincidence between the action on the instance and
the value to use. It could also give the impression that <code&gt;value&lt;/code&gt; is
changed in some way.

Avoid overspecifying definitions:

<br />MyWidget::MyWidget(const QString &amp;name;, QWidget *parent)<br />

Constructs a new widget with name name and parent parent.

Maybe something like the following would be acceptable:

Constructs a new widget with the given name and parent.

Don't change commonly used parameter names to suit local documentation requirements:

<br />void CanvasItem::setBoundingRect(const QRect &amp;rectangle);<br />

Sets the bounding rectangle of the widget.

The original <code&gt;rect&lt;/code&gt; parameter should not be renamed to rectangle.
Instead we would write something explicit:

Sets the bounding rectangle of the widget to rect.

Miscellaneous

  • Use <code&gt;</code&gt; and <code&gt;</code&gt; to omit sections from the documentation.
    • Remember that they are still present in the documentation source text.
  • Use <code&gt;</code&gt; to omit enum values from the documentation, but still allow qdoc to process them without complaint.

Style of example code

See WritingQtExamples for more detailed guidance about writing and documenting examples.

Objectives

Examples should be

  • Simple
  • Bland (not necessarily)
  • Cover the key concepts

In header files

  • Give parameter names for used parameters.
  • Write declared variables of the same type on separate lines.
  • No underscores in names.
  • Only include header files that are absolutely necessary.

In C++ files

  • Order of actions in the constructor:
    • Create each widget and set options for it.
    • Set the connections.
    • Create layout and insert items.
    • Set the title of top-level widgets with <code&gt;setWindowTitle()</code&gt;.
  • Accelerators and translations
  • Comments:
    • Introductory comment for each file. What the file is for.
    • No comments where the purpose of the code is clear.
    • General comments about functions go outside the function in a multiline comment.
    • What: the code itself.
    • Why: reason something is needed - high level. (Outside function.)
    • How: the way these actions are performed. (Outside function.)

Variable naming

From a commit message made on 2004/05/28 16:08:34:

<pre&gt;
Renamed some "flag enum&quot; types to be more consistent (i.e.
the enum type associated to a flag type through Q_DECLARE_FLAGS).

Usually, the enum type isn't used directly; only the flags type
is. Still, sometimes we do use it, and then it's important to have
a good name. Also, the documentation shows that name.

The rule I've tried to follow were:

1. If the flags type is a plural (e.g. Options, Actions, Flags),
make the enum type a singular (e.g. Option, Action, Flag).

2. Otherwise, make the enum type by appending "Flag&quot; to the
flags type (e.g. Alignment is the flags type, AlignmentFlag
is the enum type).

Notice that "Flag&quot; is a singular. This is because an enum of that
type can only store one flag at a time (whereas a variable of the
"flags&quot; type can store many).
</pre&gt;

Documentation structure

  • Necessary files to build the example.
  • Overview document (to be converted by qdoc to some other format).