summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTopi Reinio <topi.reinio@qt.io>2022-04-21 17:27:51 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-04-28 13:41:25 +0000
commit48351cd99854130b02b6621507cc2e7462d9a47b (patch)
treeb32b144a43c0c87142134e967f2c109f05688d9f
parentfebaa42be84112fd9b007f688733978e84ebfb7e (diff)
qdoc: Improve generated navigation bar for C++ and QML types
QDoc included only the page(s) provided in navigation.cppclassespage and navigation.qmltypespage in the navigation bar (breadcrumbs) generated for type reference pages. If a type is part of some other (sub-)module, include a link to that module specifically after the generic 'C++ Classes' or 'QML Types' link. In passing, fix an issue where QML type pages lost an entry for *this* page on the navigation bar if the navigation config variable was not set. Fixes: QTBUG-102387 Change-Id: I1316082858455938e4f4e2173f527b87c9a78f08 Reviewed-by: Luca Di Sera <luca.disera@qt.io> (cherry picked from commit 106a6e613cf9b70d55a2d0a14f4612d660ef45be) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/qdoc/htmlgenerator.cpp72
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/dontdocument/seenclass.html1
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/ignoresince/testqdoc-test.html1
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent-members.html2
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent.html2
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived-members.html1
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived.html1
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-int.html2
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-linkmodule-grandchild-members.html2
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-abstractparent.html2
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-child.html2
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-doctest.html2
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type-members.html2
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type-obsolete.html2
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type.html2
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-yetanotherchild.html2
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-test-nover-typenoversion-members.html3
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-test-nover-typenoversion.html3
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-progressbar.html3
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-switch.html3
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-tabwidget.html3
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-anotherchild-members.html2
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-parent.html2
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/scopedenum/testqdoc-test.html1
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/template/bar.html1
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/template/baz.html1
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/template/foo.html1
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test-struct.html1
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test.html1
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-vec.html1
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test-members.html1
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test-obsolete.html1
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test.html1
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived-members.html1
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived-obsolete.html1
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived.html1
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/testcpp.qdocconf2
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/testqml.qdocconf2
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/indexlinking/linking.qdoc1
39 files changed, 107 insertions, 28 deletions
diff --git a/src/qdoc/htmlgenerator.cpp b/src/qdoc/htmlgenerator.cpp
index 386e84e54..28dfe235e 100644
--- a/src/qdoc/htmlgenerator.cpp
+++ b/src/qdoc/htmlgenerator.cpp
@@ -1540,7 +1540,26 @@ QString HtmlGenerator::fileExtension() const
}
/*!
- Output navigation list in the html file.
+ Output a navigation bar (breadcrumbs) for the html file.
+ For API reference pages, items for the navigation bar are (in order):
+ \table
+ \header \li Item \li Related configuration variable \li Notes
+ \row \li home \li navigation.homepage \li e.g. 'Qt 6.2'
+ \row \li landing \li navigation.landingpage \li Module landing page
+ \row \li types \li navigation.cppclassespage (C++)\br
+ navigation.qmltypespage (QML) \li Types only
+ \row \li module \li n/a (automatic) \li Module page if different
+ from previous item
+ \row \li page \li n/a \li Current page title
+ \endtable
+
+ For other page types (page nodes) the navigation bar is constructed from home
+ page, landing page, and the chain of Node::navigationParent() items (if one exists).
+ This chain is constructed from the \\list structure on a page or pages defined in
+ \c navigation.toctitles configuration variable.
+
+ Finally, if no other navigation data exists for a page but it is a member of a
+ single group (using \\ingroup), add that group page to the navigation bar.
*/
void HtmlGenerator::generateNavigationBar(const QString &title, const Node *node,
CodeMarker *marker, const QString &buildversion,
@@ -1552,39 +1571,41 @@ void HtmlGenerator::generateNavigationBar(const QString &title, const Node *node
Text navigationbar;
// Set list item types based on the navigation bar type
+ // TODO: Do we still need table items?
Atom::AtomType itemLeft = tableItems ? Atom::TableItemLeft : Atom::ListItemLeft;
Atom::AtomType itemRight = tableItems ? Atom::TableItemRight : Atom::ListItemRight;
+ auto addNavItem = [&](const QString &link, const QString &title) {
+ navigationbar << Atom(itemLeft) << Atom(Atom::NavLink, link)
+ << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
+ << Atom(Atom::String, title)
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom(itemRight);
+ };
+
if (m_hometitle == title)
return;
if (!m_homepage.isEmpty())
- navigationbar << Atom(itemLeft) << Atom(Atom::NavLink, m_homepage)
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
- << Atom(Atom::String, m_hometitle)
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom(itemRight);
+ addNavItem(m_homepage, m_hometitle);
if (!m_landingpage.isEmpty() && m_landingtitle != title)
- navigationbar << Atom(itemLeft) << Atom(Atom::NavLink, m_landingpage)
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
- << Atom(Atom::String, m_landingtitle)
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom(itemRight);
+ addNavItem(m_landingpage, m_landingtitle);
if (node->isClassNode()) {
if (!m_cppclassespage.isEmpty() && !m_cppclassestitle.isEmpty())
- navigationbar << Atom(itemLeft) << Atom(Atom::NavLink, m_cppclassespage)
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
- << Atom(Atom::String, m_cppclassestitle)
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom(itemRight);
-
- if (!node->name().isEmpty())
- navigationbar << Atom(itemLeft) << Atom(Atom::String, node->name()) << Atom(itemRight);
+ addNavItem(m_cppclassespage, m_cppclassestitle);
+ if (!node->physicalModuleName().isEmpty()) {
+ // TODO: Abusing addModule() which is just a wrapper for private method findModule()
+ auto moduleNode = m_qdb->addModule(node->physicalModuleName());
+ if (moduleNode && moduleNode->title() != m_cppclassespage)
+ addNavItem(moduleNode->name(), moduleNode->name());
+ }
+ navigationbar << Atom(itemLeft) << Atom(Atom::String, node->name()) << Atom(itemRight);
} else if (node->isQmlType() || node->isQmlBasicType() || node->isJsType()
|| node->isJsBasicType()) {
if (!m_qmltypespage.isEmpty() && !m_qmltypestitle.isEmpty())
- navigationbar << Atom(itemLeft) << Atom(Atom::NavLink, m_qmltypespage)
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
- << Atom(Atom::String, m_qmltypestitle)
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK) << Atom(itemRight)
- << Atom(itemLeft) << Atom(Atom::String, title) << Atom(itemRight);
+ addNavItem(m_qmltypespage, m_qmltypestitle);
+ if (node->logicalModule() && node->logicalModule()->title() != m_qmltypespage)
+ addNavItem(node->logicalModule()->name(), node->logicalModule()->name());
+ navigationbar << Atom(itemLeft) << Atom(Atom::String, node->name()) << Atom(itemRight);
} else {
if (node->isPageNode()) {
auto currentNode = node;
@@ -1608,13 +1629,8 @@ void HtmlGenerator::generateNavigationBar(const QString &title, const Node *node
}
}
while (!navNodes.empty()) {
- if (navNodes.front()->isPageNode()) {
- navigationbar << Atom(itemLeft) << Atom(Atom::NavLink, navNodes.front()->name())
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
- << Atom(Atom::String, navNodes.front()->title())
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK)
- << Atom(itemRight);
- }
+ if (navNodes.front()->isPageNode())
+ addNavItem(navNodes.front()->name(), navNodes.front()->title());
navNodes.pop_front();
}
}
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/dontdocument/seenclass.html b/tests/auto/qdoc/generatedoutput/expected_output/dontdocument/seenclass.html
index 0e2ff10b5..c0501ee46 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/dontdocument/seenclass.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/dontdocument/seenclass.html
@@ -6,6 +6,7 @@
<title>SeenClass Class | TestCPP</title>
</head>
<body>
+<li><a href="testcpp-module.html">C++ Classes</a></li>
<li>SeenClass</li>
<div class="sidebar">
<div class="toc">
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/ignoresince/testqdoc-test.html b/tests/auto/qdoc/generatedoutput/expected_output/ignoresince/testqdoc-test.html
index 61cced34f..4e8ac4e16 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/ignoresince/testqdoc-test.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/ignoresince/testqdoc-test.html
@@ -6,6 +6,7 @@
<title>Test Class | TestCPP</title>
</head>
<body>
+<li><a href="testcpp-module.html">C++ Classes</a></li>
<li>Test</li>
<div class="sidebar">
<div class="toc">
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent-members.html b/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent-members.html
index 1ca034caf..3c2b409f9 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent-members.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent-members.html
@@ -6,6 +6,8 @@
<title>List of All Members for AbstractParent | Test</title>
</head>
<body>
+<li><a href="qdoc-test-qmlmodule.html">Types</a></li>
+<li>AbstractParent</li>
<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
<h1 class="title">List of All Members for AbstractParent</h1>
<p>This is the complete list of members for <a href="qml-qdoc-test-abstractparent.html">AbstractParent</a>, including inherited members.</p>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent.html b/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent.html
index 0c11a6711..2d946fcf4 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/includefromexampledirs/qml-qdoc-test-abstractparent.html
@@ -6,6 +6,8 @@
<title>AbstractParent QML Type | Test</title>
</head>
<body>
+<li><a href="qdoc-test-qmlmodule.html">Types</a></li>
+<li>AbstractParent</li>
<div class="sidebar">
<div class="toc">
<h3 id="toc">Contents</h3>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived-members.html b/tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived-members.html
index f10eec781..f1a359bcc 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived-members.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived-members.html
@@ -6,6 +6,7 @@
<title>List of All Members for TestDerived | TestCPP</title>
</head>
<body>
+<li><a href="testcpp-module.html">C++ Classes</a></li>
<li>TestDerived</li>
<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
<h1 class="title">List of All Members for TestDerived</h1>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived.html b/tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived.html
index f0758f35f..52997f234 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived.html
@@ -6,6 +6,7 @@
<title>TestDerived Class | TestCPP</title>
</head>
<body>
+<li><a href="testcpp-module.html">C++ Classes</a></li>
<li>TestDerived</li>
<div class="sidebar">
<div class="toc">
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-int.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-int.html
index 77c951c05..e48918857 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-int.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/qml-int.html
@@ -6,6 +6,8 @@
<title>int QML Basic Type | Test</title>
</head>
<body>
+<li><a href="qdoc-test-qmlmodule.html">Types</a></li>
+<li>int</li>
<div class="sidebar">
<div class="toc">
<h3 id="toc">Contents</h3>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-linkmodule-grandchild-members.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-linkmodule-grandchild-members.html
index 8052be015..3527f5c71 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-linkmodule-grandchild-members.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/qml-linkmodule-grandchild-members.html
@@ -6,6 +6,8 @@
<title>List of All Members for GrandChild | IndexLinking</title>
</head>
<body>
+<li><a href="linkmodule-qmlmodule.html">LinkModule</a></li>
+<li>GrandChild</li>
<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
<h1 class="title">List of All Members for GrandChild</h1>
<p>This is the complete list of members for <a href="qml-linkmodule-grandchild.html">GrandChild</a>, including inherited members.</p>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-abstractparent.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-abstractparent.html
index 32165b273..d5cfb752a 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-abstractparent.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-abstractparent.html
@@ -6,6 +6,8 @@
<title>AbstractParent QML Type | Test</title>
</head>
<body>
+<li><a href="qdoc-test-qmlmodule.html">Types</a></li>
+<li>AbstractParent</li>
<div class="sidebar">
<div class="toc">
<h3 id="toc">Contents</h3>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-child.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-child.html
index 5cf37e732..b8b6eff43 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-child.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-child.html
@@ -6,6 +6,8 @@
<title>Child QML Type | Test</title>
</head>
<body>
+<li><a href="qdoc-test-qmlmodule.html">Types</a></li>
+<li>Child</li>
<div class="sidebar">
<div class="toc">
<h3 id="toc">Contents</h3>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-doctest.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-doctest.html
index e16ba8519..424d12ff9 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-doctest.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-doctest.html
@@ -6,6 +6,8 @@
<title>DocTest QML Type | Test</title>
</head>
<body>
+<li><a href="qdoc-test-qmlmodule.html">Types</a></li>
+<li>DocTest</li>
<div class="sidebar">
<div class="toc">
<h3 id="toc">Contents</h3>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type-members.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type-members.html
index bfbbb204d..a77f1fbfa 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type-members.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type-members.html
@@ -6,6 +6,8 @@
<title>List of All Members for Type | Test</title>
</head>
<body>
+<li><a href="qdoc-test-qmlmodule.html">Types</a></li>
+<li>Type</li>
<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
<h1 class="title">List of All Members for Type</h1>
<p>This is the complete list of members for <a href="qml-qdoc-test-type.html">Type</a>, including inherited members.</p>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type-obsolete.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type-obsolete.html
index 2c2e00b29..5df5a5fd7 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type-obsolete.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type-obsolete.html
@@ -6,6 +6,8 @@
<title>Obsolete Members for Type | Test</title>
</head>
<body>
+<li><a href="qdoc-test-qmlmodule.html">Types</a></li>
+<li>Type</li>
<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
<h1 class="title">Obsolete Members for Type</h1>
<p><b>The following members of QML type <a href="qml-qdoc-test-type.html">Type</a> are deprecated.</b> They are provided to keep old source code working. We strongly advise against using them in new code.</p>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type.html
index ecb295135..7fe747f14 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-type.html
@@ -6,6 +6,8 @@
<title>Type QML Type | Test</title>
</head>
<body>
+<li><a href="qdoc-test-qmlmodule.html">Types</a></li>
+<li>Type</li>
<div class="sidebar">
<div class="toc">
<h3 id="toc">Contents</h3>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-yetanotherchild.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-yetanotherchild.html
index 074fb30d9..f03fbb7c9 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-yetanotherchild.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/qml-qdoc-test-yetanotherchild.html
@@ -6,6 +6,8 @@
<title>YetAnotherChild QML Type | Test</title>
</head>
<body>
+<li><a href="qdoc-test-qmlmodule.html">Types</a></li>
+<li>YetAnotherChild</li>
<div class="sidebar">
<div class="toc">
<h3 id="toc">Contents</h3>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-test-nover-typenoversion-members.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-test-nover-typenoversion-members.html
index a9bf9cf1d..96ef55fea 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-test-nover-typenoversion-members.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/qml-test-nover-typenoversion-members.html
@@ -6,6 +6,9 @@
<title>List of All Members for TypeNoVersion | Test</title>
</head>
<body>
+<li><a href="qdoc-test-qmlmodule.html">Types</a></li>
+<li><a href="test-nover-qmlmodule.html">Test.NoVer</a></li>
+<li>TypeNoVersion</li>
<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
<h1 class="title">List of All Members for TypeNoVersion</h1>
<p>This is the complete list of members for <a href="qml-test-nover-typenoversion.html">TypeNoVersion</a>, including inherited members.</p>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-test-nover-typenoversion.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-test-nover-typenoversion.html
index 92cf4a514..46268e75c 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-test-nover-typenoversion.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/qml-test-nover-typenoversion.html
@@ -6,6 +6,9 @@
<title>TypeNoVersion QML Type | Test</title>
</head>
<body>
+<li><a href="qdoc-test-qmlmodule.html">Types</a></li>
+<li><a href="test-nover-qmlmodule.html">Test.NoVer</a></li>
+<li>TypeNoVersion</li>
<div class="sidebar">
<div class="toc">
<h3 id="toc">Contents</h3>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-progressbar.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-progressbar.html
index af59ed21d..dabf3e086 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-progressbar.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-progressbar.html
@@ -6,6 +6,9 @@
<title>ProgressBar QML Type | Test</title>
</head>
<body>
+<li><a href="qdoc-test-qmlmodule.html">Types</a></li>
+<li><a href="uicomponents-qmlmodule.html">UIComponents</a></li>
+<li>ProgressBar</li>
<div class="sidebar">
<div class="toc">
<h3 id="toc">Contents</h3>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-switch.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-switch.html
index b80835b63..13a4bbd25 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-switch.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-switch.html
@@ -6,6 +6,9 @@
<title>Switch QML Type | Test</title>
</head>
<body>
+<li><a href="qdoc-test-qmlmodule.html">Types</a></li>
+<li><a href="uicomponents-qmlmodule.html">UIComponents</a></li>
+<li>Switch</li>
<div class="sidebar">
<div class="toc">
<h3 id="toc">Contents</h3>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-tabwidget.html b/tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-tabwidget.html
index 1b0f37f84..eb8ed845f 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-tabwidget.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/qml-uicomponents-tabwidget.html
@@ -6,6 +6,9 @@
<title>TabWidget QML Type | Test</title>
</head>
<body>
+<li><a href="qdoc-test-qmlmodule.html">Types</a></li>
+<li><a href="uicomponents-qmlmodule.html">UIComponents</a></li>
+<li>TabWidget</li>
<div class="sidebar">
<div class="toc">
<h3 id="toc">Contents</h3>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-anotherchild-members.html b/tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-anotherchild-members.html
index 108db2ea7..842cc9a63 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-anotherchild-members.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-anotherchild-members.html
@@ -6,6 +6,8 @@
<title>List of All Members for AnotherChild | QmlPropertyGroups</title>
</head>
<body>
+<li><a href="qdoc-test-qmlmodule.html">Types</a></li>
+<li>AnotherChild</li>
<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
<h1 class="title">List of All Members for AnotherChild</h1>
<p>This is the complete list of members for <a href="qml-qdoc-test-anotherchild.html">AnotherChild</a>, including inherited members.</p>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-parent.html b/tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-parent.html
index 479ac12b0..2f106cd50 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-parent.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/qmlpropertygroups/qml-qdoc-test-parent.html
@@ -6,6 +6,8 @@
<title>Parent QML Type | QmlPropertyGroups</title>
</head>
<body>
+<li><a href="qdoc-test-qmlmodule.html">Types</a></li>
+<li>Parent</li>
<div class="sidebar">
<div class="toc">
<h3 id="toc">Contents</h3>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/scopedenum/testqdoc-test.html b/tests/auto/qdoc/generatedoutput/expected_output/scopedenum/testqdoc-test.html
index 8ce477c54..916dc7242 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/scopedenum/testqdoc-test.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/scopedenum/testqdoc-test.html
@@ -6,6 +6,7 @@
<title>Test Class | TestCPP</title>
</head>
<body>
+<li><a href="testcpp-module.html">C++ Classes</a></li>
<li>Test</li>
<div class="sidebar">
<div class="toc">
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/template/bar.html b/tests/auto/qdoc/generatedoutput/expected_output/template/bar.html
index 0818aab4e..905692c12 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/template/bar.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/template/bar.html
@@ -6,6 +6,7 @@
<title>Bar Class | TestCPP</title>
</head>
<body>
+<li><a href="testcpp-module.html">C++ Classes</a></li>
<li>Bar</li>
<div class="sidebar">
<div class="toc">
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/template/baz.html b/tests/auto/qdoc/generatedoutput/expected_output/template/baz.html
index 9022d863b..6b4d5d06b 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/template/baz.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/template/baz.html
@@ -6,6 +6,7 @@
<title>Baz Struct | TestCPP</title>
</head>
<body>
+<li><a href="testcpp-module.html">C++ Classes</a></li>
<li>Baz</li>
<div class="sidebar">
<div class="toc">
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/template/foo.html b/tests/auto/qdoc/generatedoutput/expected_output/template/foo.html
index 7a54973d3..6ba8fb2cf 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/template/foo.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/template/foo.html
@@ -6,6 +6,7 @@
<title>Foo Class | TestCPP</title>
</head>
<body>
+<li><a href="testcpp-module.html">C++ Classes</a></li>
<li>Foo</li>
<div class="sidebar">
<div class="toc">
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test-struct.html b/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test-struct.html
index 1e4a40e2a..cdece74c9 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test-struct.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test-struct.html
@@ -6,6 +6,7 @@
<title>Struct Struct | TestCPP</title>
</head>
<body>
+<li><a href="testcpp-module.html">C++ Classes</a></li>
<li>Struct</li>
<div class="sidebar">
<div class="toc">
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test.html b/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test.html
index b6bccb3b7..6c11a75c0 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-test.html
@@ -6,6 +6,7 @@
<title>Test Class | TestCPP</title>
</head>
<body>
+<li><a href="testcpp-module.html">C++ Classes</a></li>
<li>Test</li>
<div class="sidebar">
<div class="toc">
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-vec.html b/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-vec.html
index 9580f2b3a..2b97dcf84 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-vec.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/template/testqdoc-vec.html
@@ -6,6 +6,7 @@
<title>Vec Class | TestCPP</title>
</head>
<body>
+<li><a href="testcpp-module.html">C++ Classes</a></li>
<li>Vec</li>
<div class="sidebar">
<div class="toc">
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test-members.html b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test-members.html
index df0da4386..47a084d27 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test-members.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test-members.html
@@ -6,6 +6,7 @@
<title>List of All Members for Test | TestCPP</title>
</head>
<body>
+<li><a href="testcpp-module.html">C++ Classes</a></li>
<li>Test</li>
<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
<h1 class="title">List of All Members for Test</h1>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test-obsolete.html b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test-obsolete.html
index f2745c488..6999c6ae8 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test-obsolete.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test-obsolete.html
@@ -6,6 +6,7 @@
<title>Obsolete Members for Test | TestCPP</title>
</head>
<body>
+<li><a href="testcpp-module.html">C++ Classes</a></li>
<li>Test</li>
<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
<h1 class="title">Obsolete Members for Test</h1>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test.html b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test.html
index 2fa5a84d5..503ec2560 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-test.html
@@ -6,6 +6,7 @@
<title>Test Class | TestCPP</title>
</head>
<body>
+<li><a href="testcpp-module.html">C++ Classes</a></li>
<li>Test</li>
<div class="sidebar">
<div class="toc">
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived-members.html b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived-members.html
index f8f9cd8f7..dd1911df1 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived-members.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived-members.html
@@ -6,6 +6,7 @@
<title>List of All Members for TestDerived | TestCPP</title>
</head>
<body>
+<li><a href="testcpp-module.html">C++ Classes</a></li>
<li>TestDerived</li>
<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
<h1 class="title">List of All Members for TestDerived</h1>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived-obsolete.html b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived-obsolete.html
index ace00a295..b1b838803 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived-obsolete.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived-obsolete.html
@@ -6,6 +6,7 @@
<title>Obsolete Members for TestDerived | TestCPP</title>
</head>
<body>
+<li><a href="testcpp-module.html">C++ Classes</a></li>
<li>TestDerived</li>
<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
<h1 class="title">Obsolete Members for TestDerived</h1>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived.html b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived.html
index 81afea79d..9f7a9211a 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/testqdoc-testderived.html
@@ -6,6 +6,7 @@
<title>TestDerived Class | TestCPP</title>
</head>
<body>
+<li><a href="testcpp-module.html">C++ Classes</a></li>
<li>TestDerived</li>
<div class="sidebar">
<div class="toc">
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/testcpp.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/testcpp.qdocconf
index b1d26f27e..ec23714bf 100644
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/testcpp.qdocconf
+++ b/tests/auto/qdoc/generatedoutput/testdata/configs/testcpp.qdocconf
@@ -10,3 +10,5 @@ exampledirs = ../testcpp/snippets
macro.CMDFN = \\\\fn
macro.nothing = \\dontdocument ()
macro.testnoautolist = \\if defined(test_noautolist)\n\\noautolist\n\\endif
+
+navigation.cppclassespage = "QDoc Test C++ Classes"
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/testqml.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/testqml.qdocconf
index 1c4d29a13..15d3f5272 100644
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/testqml.qdocconf
+++ b/tests/auto/qdoc/generatedoutput/testdata/configs/testqml.qdocconf
@@ -19,4 +19,6 @@ examples.fileextensions = "*.qml *.cpp"
macro.begincomment = "\\c{/*}"
macro.QDocTestVer = "1.1"
+navigation.qmltypespage = "QDoc.Test QML Module"
+navigation.qmltypestitle = "Types"
warninglimit += 1
diff --git a/tests/auto/qdoc/generatedoutput/testdata/indexlinking/linking.qdoc b/tests/auto/qdoc/generatedoutput/testdata/indexlinking/linking.qdoc
index 1cbf1e424..acef9591b 100644
--- a/tests/auto/qdoc/generatedoutput/testdata/indexlinking/linking.qdoc
+++ b/tests/auto/qdoc/generatedoutput/testdata/indexlinking/linking.qdoc
@@ -39,6 +39,7 @@
*/
/*!
+ \title LinkModule QML Types
\qmlmodule LinkModule 1.0
*/