summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.cmake.conf2
-rw-r--r--CMakeLists.txt2
-rw-r--r--cmake/FindWrapLibClang.cmake6
-rw-r--r--configure.cmake1
-rw-r--r--dependencies.yaml6
-rw-r--r--licenseRule.json158
-rw-r--r--src/assistant/CMakeLists.txt1
-rw-r--r--src/assistant/help/CMakeLists.txt1
-rw-r--r--src/assistant/plugins/CMakeLists.txt6
-rw-r--r--src/assistant/plugins/help/CMakeLists.txt14
-rw-r--r--src/assistant/plugins/help/qhelpengineplugin.cpp95
-rw-r--r--src/assistant/plugins/help/qhelpengineplugin.h65
-rw-r--r--src/designer/src/components/formeditor/deviceprofiledialog.cpp2
-rw-r--r--src/designer/src/components/formeditor/formwindowsettings.cpp2
-rw-r--r--src/designer/src/components/formeditor/templateoptionspage.cpp2
-rw-r--r--src/designer/src/components/propertyeditor/designerpropertymanager.cpp19
-rw-r--r--src/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp2
-rw-r--r--src/designer/src/designer/doc/src/designer-manual.qdoc3
-rw-r--r--src/designer/src/designer/preferencesdialog.cpp2
-rw-r--r--src/designer/src/designer/qdesigner_appearanceoptions.cpp2
-rw-r--r--src/designer/src/lib/CMakeLists.txt14
-rw-r--r--src/designer/src/lib/shared/gridpanel.cpp2
-rw-r--r--src/designer/src/lib/shared/newactiondialog.cpp2
-rw-r--r--src/designer/src/lib/shared/newformwidget.cpp2
-rw-r--r--src/designer/src/lib/shared/orderdialog.cpp2
-rw-r--r--src/qdoc/qdoc/doc/examples/qml.qdoc.sample2
-rw-r--r--src/qdoc/qdoc/doc/qdoc-guide/qdoc-guide.qdoc4
-rw-r--r--src/qdoc/qdoc/doc/qdoc-guide/qtwritingstyle-qml.qdoc4
-rw-r--r--src/qdoc/qdoc/doc/qdoc-manual-cmdindex.qdoc4
-rw-r--r--src/qdoc/qdoc/doc/qdoc-manual-contextcmds.qdoc2
-rw-r--r--src/qdoc/qdoc/doc/qdoc-manual-macros.qdoc27
-rw-r--r--src/qdoc/qdoc/doc/qdoc-manual-markupcmds.qdoc24
-rw-r--r--src/qdoc/qdoc/doc/qdoc-manual-qdocconf.qdoc46
-rw-r--r--src/qdoc/qdoc/doc/qdoc-manual-topiccmds.qdoc46
-rw-r--r--src/qdoc/qdoc/doc/qdoc-warnings.qdoc27
-rw-r--r--src/qdoc/qdoc/src/qdoc/atom.h1
-rw-r--r--src/qdoc/qdoc/src/qdoc/classnode.cpp31
-rw-r--r--src/qdoc/qdoc/src/qdoc/classnode.h9
-rw-r--r--src/qdoc/qdoc/src/qdoc/codeparser.h3
-rw-r--r--src/qdoc/qdoc/src/qdoc/config.cpp1
-rw-r--r--src/qdoc/qdoc/src/qdoc/config.h2
-rw-r--r--src/qdoc/qdoc/src/qdoc/cppcodeparser.cpp54
-rw-r--r--src/qdoc/qdoc/src/qdoc/cppcodeparser.h5
-rw-r--r--src/qdoc/qdoc/src/qdoc/docbookgenerator.cpp89
-rw-r--r--src/qdoc/qdoc/src/qdoc/docparser.cpp15
-rw-r--r--src/qdoc/qdoc/src/qdoc/generator.cpp95
-rw-r--r--src/qdoc/qdoc/src/qdoc/generator.h2
-rw-r--r--src/qdoc/qdoc/src/qdoc/htmlgenerator.cpp102
-rw-r--r--src/qdoc/qdoc/src/qdoc/htmlgenerator.h6
-rw-r--r--src/qdoc/qdoc/src/qdoc/qdocindexfiles.cpp77
-rw-r--r--src/qdoc/qdoc/src/qdoc/qdocindexfiles.h1
-rw-r--r--src/qdoc/qdoc/src/qdoc/tree.cpp2
-rw-r--r--src/qdoc/qdoc/src/qdoc/webxmlgenerator.cpp2
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/autolinking.html4
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist/testcpp-module.html2
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp-module.html2
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/testcpp-module.html2
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/testqdoc-test.html4
-rw-r--r--src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-test.html4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-type.xml2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-themodule-thetype.xml2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/testqdoc-test.xml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/testqdoc-testderived.xml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/autolinking.html4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-type.html2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-themodule-thetype.html2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-progressbar.html2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-switch.html2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-tabwidget.html2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testcpp-module.html2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-test.html6
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-testderived.html6
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/uicomponents-qmlmodule.html2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/properties.qdoc2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/type.cpp2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/testcpp.h2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/html/testheader.html2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/brief-adventures.html2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/a-page-with-a-line-comment-in-the-see-also-command.html2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/line-comment-adventures.html2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/cppmodule-module-suffix.xml26
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/group.xml11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/modifiedoutputfilenames-test-example.xml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/page.xml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/prefix-header-suffix.xml21
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/prefix-namespace-class-suffix.xml22
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/prefix-namespace-suffix.xml27
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/qml-qmlmodule-suffix-type.xml21
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/qmlmodule-qmlmodule-suffix.xml16
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/cppmodule-module-suffix.html32
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/group.html15
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/modifiedoutputfilenames-test-example.html15
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/modifiedoutputfilenames.index16
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/page.html15
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/prefix-header-suffix.html24
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/prefix-namespace-class-suffix.html29
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/prefix-namespace-suffix.html35
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/qml-qmlmodule-suffix-type-members.html14
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/qml-qmlmodule-suffix-type.html27
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/qmlmodule-qmlmodule-suffix.html18
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/cppmodule-module-suffix.webxml4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/group.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/modifiedoutputfilenames-test-example.webxml8
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/modifiedoutputfilenames.index16
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/page.webxml8
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/prefix-header-suffix.webxml8
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/prefix-namespace-class-suffix.webxml8
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/prefix-namespace-suffix.webxml11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/qmlmodule-qmlmodule-suffix.webxml4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/modifiedoutputfilenames.qdocconf22
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/src/example/test/CMakeLists.txt1
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/src/test.cpp24
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/src/test.h12
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/adventures-with-non-ascii-characters.html2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/qdoctests-qdocfileoutput.html10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/toc.html6
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/docbook/cppcar.xml28
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/docbook/qml-qmlnativetypesynopsis-car.xml66
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/docbook/qml-qmlnativetypesynopsis-truck.xml66
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/docbook/qmlnativetypesynopsis-qmlmodule.xml25
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/cppcar.html33
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qml-nativetype-synopsis-test.index20
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qml-qmlnativetypesynopsis-car-members.html15
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qml-qmlnativetypesynopsis-car.html46
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qml-qmlnativetypesynopsis-truck-members.html15
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qml-qmlnativetypesynopsis-truck.html46
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qmlnativetypesynopsis-qmlmodule.html19
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/webxml/cppcar.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/webxml/qml-nativetype-synopsis-test.index20
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/webxml/qmlnativetypesynopsis-qmlmodule.webxml4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/qml_nativetype_synopsis.qdocconf23
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/src/cppcar.cpp68
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/src/cppcar.h10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/autolinking.html4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testcpp-module.html2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-test.html4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/autolinking.html4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testcpp-module.html2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-test.html4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocfileoutput-exhaustive.html4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocfileoutput-linking.html2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocfileoutput.html12
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/toc-test.html12
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/toc.html8
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/docbook/trademark-test.xml15
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/docbook/trademarks.xml17
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/html/trademark-test.html26
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/html/trademarkcommand.index12
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/html/trademarks.html21
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/webxml/trademark-test.webxml15
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/webxml/trademarkcommand.index12
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/webxml/trademarks.webxml18
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/src/test.qdoc28
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/trademark_command.qdocconf17
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/html/trailingbackslashes.index12
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/webxml/struct.webxml3
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/webxml/trailingbackslashes.index12
-rw-r--r--tests/auto/linguist/lupdate/tst_lupdate.cpp2
158 files changed, 2146 insertions, 376 deletions
diff --git a/.cmake.conf b/.cmake.conf
index f1e963040..cba2d4a77 100644
--- a/.cmake.conf
+++ b/.cmake.conf
@@ -1,4 +1,4 @@
-set(QT_REPO_MODULE_VERSION "6.8.0")
+set(QT_REPO_MODULE_VERSION "6.9.0")
set(QT_REPO_MODULE_PRERELEASE_VERSION_SEGMENT "alpha1")
set(QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_AS_CONST=1")
set(QDOC_MINIMUM_CLANG_VERSION "15")
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0af185486..9dad55210 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -20,7 +20,7 @@ endif()
find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core Network)
find_package(Qt6 ${PROJECT_VERSION} QUIET CONFIG OPTIONAL_COMPONENTS
- DBus Xml Widgets Quick QuickWidgets Qml
+ DBus Xml Widgets Quick QuickWidgets Qml QmlLSPrivate
Sql PrintSupport OpenGL OpenGLWidgets ${optional_components})
qt_internal_project_setup()
diff --git a/cmake/FindWrapLibClang.cmake b/cmake/FindWrapLibClang.cmake
index b3ef7cd82..20faa99d3 100644
--- a/cmake/FindWrapLibClang.cmake
+++ b/cmake/FindWrapLibClang.cmake
@@ -17,9 +17,15 @@ endif()
find_package(Clang CONFIG)
# LLVM versions >= 16 come with Findzstd.cmake that creates a target for libzstd.
# Disable its global promotion to prevent interference with FindWrapZSTD.cmake.
+if(TARGET zstd::libzstd)
+ qt_internal_disable_find_package_global_promotion(zstd::libzstd)
+endif()
if(TARGET zstd::libzstd_shared)
qt_internal_disable_find_package_global_promotion(zstd::libzstd_shared)
endif()
+if(TARGET zstd::libzstd_static)
+ qt_internal_disable_find_package_global_promotion(zstd::libzstd_static)
+endif()
if(__qt_wrap_clang_backup_prefix)
set(CMAKE_PREFIX_PATH "${__qt_wrap_clang_backup_prefix}")
diff --git a/configure.cmake b/configure.cmake
index e0facf0b9..51a5196da 100644
--- a/configure.cmake
+++ b/configure.cmake
@@ -74,6 +74,7 @@ qt_feature("kmap2qmap" PRIVATE
qt_feature("linguist" PRIVATE
LABEL "Qt Linguist"
PURPOSE "Qt Linguist can be used by translator to translate text in Qt applications."
+ CONDITION TARGET Qt::PrintSupport
)
qt_feature("pixeltool" PRIVATE
LABEL "pixeltool"
diff --git a/dependencies.yaml b/dependencies.yaml
index 641caab8d..17c4ae838 100644
--- a/dependencies.yaml
+++ b/dependencies.yaml
@@ -1,10 +1,10 @@
dependencies:
../qtactiveqt:
- ref: 31aa607db8fc4e6a9e6662295557b8dc53d8bbc4
+ ref: d9f892779c119ec9a1a9bbe3c15a9e1c91b27fe6
required: false
../qtbase:
- ref: f0633e823796775d2c019363ca4f1cb008851402
+ ref: 2d72757875c913939909a1a36fcb123a1e26ac26
required: true
../qtdeclarative:
- ref: 1635ca51f018bbb8d1ea5069a7f2ed8503be8cb9
+ ref: 5ca788a7a2bede98c9c75ce1068fa32fd63478cf
required: false
diff --git a/licenseRule.json b/licenseRule.json
new file mode 100644
index 000000000..7ab1faea8
--- /dev/null
+++ b/licenseRule.json
@@ -0,0 +1,158 @@
+[
+ {
+ "comment" : [ "file_pattern_ending: strings matched against the end of a file name.",
+ "location keys: regular expression matched against the beginning of",
+ "the file path (relative to the git submodule root).",
+ "spdx: list of SPDX-License-Expression's allowed in the matching files.",
+ "-------------------------------------------------------",
+ "Files with the following endings are Build System licensed,",
+ "unless they are examples",
+ "Files with other endings can also be build system files"
+ ],
+ "file_pattern_ending" : ["CMakeLists.txt", ".cmake", ".pro", ".prf", "configure"],
+ "location" : {
+ "" : {
+ "comment" : "File with other endings also belong to the build system file type",
+ "file type" : "build system",
+ "spdx" : ["BSD-3-Clause"]
+ },
+ "(.*)(examples/|snippets/)" : {
+ "comment" : "Example takes precedence",
+ "file type" : "examples and snippets",
+ "spdx" : ["LicenseRef-Qt-Commercial OR BSD-3-Clause"]
+ }
+ }
+ },
+ {
+ "file_pattern_ending" : [".qdoc", ".qdocinc" , ".qdocconf", ".qdoc.sample", "README.md"],
+ "location" :{
+ "" : {
+ "comment" : "",
+ "file type" : "documentation",
+ "spdx" : ["LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only"]
+ },
+ "src/qdoc/qdoc/tests/generatedoutput/testdata/" : {
+ "comment" : "",
+ "file type" : "test",
+ "spdx" : ["LicenseRef-Qt-Commercial OR GPL-3.0-only"]
+ }
+ }
+ },
+ {
+ "comments" : ["Files with the following endings are tool licensed",
+ "unless they are in example or snippet, in which case",
+ "the should be accordingly licensed.",
+ "At the moment there is no such file in example not snippet."],
+ "file_pattern_ending" : [".sh", ".py", ".pl", ".bat", ".ps1"],
+ "location" :{
+ "" : {
+ "comment" : "",
+ "file type" : "tools",
+ "spdx" : ["LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0"]
+ },
+ "(.*)(examples/|snippets/)" : {
+ "comment" : "Example takes precedence",
+ "file type" : "examples and snippets",
+ "spdx" : ["LicenseRef-Qt-Commercial OR BSD-3-Clause"]
+ }
+ }
+ },
+ {
+ "comment" : ["All other files",
+ "The licensing is defined only by the file location in the Qt module repository.",
+ "NO <file_pattern_ending> key for this case!",
+ "This needs to be the last entry of the file."],
+ "location" : {
+ "" : {
+ "comment" : "tools repository",
+ "file type" : "tools",
+ "spdx" : ["LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0"]
+ },
+ "src/designer/src/plugins/" : {
+ "comment" : "plugins for Qt Widgets Designer, but also Qt UI Tools",
+ "file type" : "module and plugin",
+ "spdx" : ["LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only"]
+ },
+ "src/uiplugin/" : {
+ "comment" : "UiTools links UiPlugin",
+ "file type" : "module and plugin",
+ "spdx" : ["LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only"]
+ },
+ "src/assistant/help/" : {
+ "comment" : "library",
+ "file type" : "module and plugin",
+ "spdx" : ["LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only"]
+ },
+ "src/assistant/qhelpgenerator/" : {
+ "comment" : "",
+ "file type" : "tools",
+ "spdx" : ["LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0"]
+ },
+ "src/assistant/shared/" : {
+ "comment" : "used in library and tools",
+ "file type" : "module and plugin",
+ "spdx" : ["LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only"]
+ },
+ "src/assistant/" : {
+ "comment" : "for a tool",
+ "file type" : "tools",
+ "spdx" : ["LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0"]
+ },
+ "src/designer/src/lib/uilib" : {
+ "comment" : "code used in src/uitools",
+ "file type" : "module and plugin",
+ "spdx" : ["LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only"]
+ },
+ "src/designer/" : {
+ "comment" : "for a tool",
+ "file type" : "tools",
+ "spdx" : ["LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0"]
+ },
+ "src/uilib/" : {
+ "comment" : "library",
+ "file type" : "module and plugin",
+ "spdx" : ["LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only"]
+ },
+ "src/shared/" : {
+ "comment" : "used by some libraries",
+ "file type" : "module and plugin",
+ "spdx" : ["LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only"]
+ },
+ "src/uitools/" : {
+ "comment" : "code for the Qt Ui Tools library",
+ "file type" : "module and plugin",
+ "spdx" : ["LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only"]
+ },
+ "src/qdoc/qdoc/src/qdoc/" : {
+ "comment" : "",
+ "file type" : "tools",
+ "spdx" : ["LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0"]
+ },
+ "src/qdoc/catch/include/catch/catch.hpp" : {
+ "comment" : "src/qdoc/catch/CATCH_LICENSE.txt",
+ "file type" : "module and plugin",
+ "spdx" : ["BSL-1.0"]
+ },
+ "tests/" : {
+ "comment" : "",
+ "file type" : "test",
+ "spdx" : ["LicenseRef-Qt-Commercial OR GPL-3.0-only"]
+ },
+ "src/qdoc/qdoc/tests/" : {
+ "comment" : "",
+ "file type" : "test",
+ "spdx" : ["LicenseRef-Qt-Commercial OR GPL-3.0-only"]
+ },
+ "src/qdoc/qdoc/tests/generatedoutput/testdata/examples/" : {
+ "comment" : "",
+ "file type" : "test",
+ "spdx" : ["LicenseRef-Qt-Commercial OR GPL-3.0-only"]
+ },
+ "(.*)(examples/|snippets/)" : {
+ "comment" : "",
+ "file type" : "examples and snippets",
+ "spdx" : ["LicenseRef-Qt-Commercial OR BSD-3-Clause"]
+ }
+ }
+ }
+]
diff --git a/src/assistant/CMakeLists.txt b/src/assistant/CMakeLists.txt
index 17d3c3c8c..2f47be12b 100644
--- a/src/assistant/CMakeLists.txt
+++ b/src/assistant/CMakeLists.txt
@@ -19,6 +19,7 @@ endif()
add_subdirectory(help)
add_subdirectory(assistant)
add_subdirectory(qhelpgenerator)
+add_subdirectory(plugins)
set(QLITEHTML_BIN_PATH ${INSTALL_BINDIR})
set(QLITEHTML_LIBRARY_PATH ${INSTALL_LIBDIR})
diff --git a/src/assistant/help/CMakeLists.txt b/src/assistant/help/CMakeLists.txt
index 45c4c192e..a9bfc9b53 100644
--- a/src/assistant/help/CMakeLists.txt
+++ b/src/assistant/help/CMakeLists.txt
@@ -6,6 +6,7 @@
#####################################################################
qt_internal_add_module(Help
+ PLUGIN_TYPES help
SOURCES
# QtHelpCore
qcompressedhelpinfo.cpp qcompressedhelpinfo.h
diff --git a/src/assistant/plugins/CMakeLists.txt b/src/assistant/plugins/CMakeLists.txt
new file mode 100644
index 000000000..9e096a4ef
--- /dev/null
+++ b/src/assistant/plugins/CMakeLists.txt
@@ -0,0 +1,6 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+if(TARGET Qt::Help AND TARGET Qt::QmlLSPrivate)
+ add_subdirectory(help)
+endif()
diff --git a/src/assistant/plugins/help/CMakeLists.txt b/src/assistant/plugins/help/CMakeLists.txt
new file mode 100644
index 000000000..00f0991ad
--- /dev/null
+++ b/src/assistant/plugins/help/CMakeLists.txt
@@ -0,0 +1,14 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_plugin(QHelpEnginePlugin
+ OUTPUT_NAME helpplugin
+ PLUGIN_TYPE help
+ SOURCES
+ qhelpengineplugin.h
+ qhelpengineplugin.cpp
+ LIBRARIES
+ Qt::Core
+ Qt::QmlLSPrivate
+ Qt::Help
+)
diff --git a/src/assistant/plugins/help/qhelpengineplugin.cpp b/src/assistant/plugins/help/qhelpengineplugin.cpp
new file mode 100644
index 000000000..55296c8e8
--- /dev/null
+++ b/src/assistant/plugins/help/qhelpengineplugin.cpp
@@ -0,0 +1,95 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qhelpengineplugin.h"
+
+#include <algorithm>
+#include <iterator>
+#include <memory>
+
+QT_BEGIN_NAMESPACE
+
+static std::vector<QQmlLSHelpProvider::DocumentLink>
+transformQHelpLink(QList<QHelpLink> &&qhelplinklist)
+{
+ std::vector<QQmlLSHelpProvider::DocumentLink> result(qhelplinklist.size());
+ std::transform(qhelplinklist.begin(), qhelplinklist.end(), result.begin(),
+ [&](const auto &item) {
+ QQmlLSHelpProvider::DocumentLink element;
+ element.title = item.title;
+ element.url = item.url;
+ return element;
+ });
+ return result;
+}
+
+QQmlLSHelpProvider::QQmlLSHelpProvider(const QString &qhcFilePath, QObject *parent)
+{
+ m_helpEngine.emplace(qhcFilePath, parent);
+ m_helpEngine->setReadOnly(false);
+ m_helpEngine->setupData();
+}
+
+bool QQmlLSHelpProvider::registerDocumentation(const QString &documentationFileName)
+{
+ Q_ASSERT(m_helpEngine.has_value());
+ return m_helpEngine->registerDocumentation(documentationFileName);
+}
+
+QByteArray QQmlLSHelpProvider::fileData(const QUrl &url) const
+{
+ Q_ASSERT(m_helpEngine.has_value());
+ return m_helpEngine->fileData(url);
+}
+
+std::vector<QQmlLSHelpProvider::DocumentLink>
+QQmlLSHelpProvider::documentsForIdentifier(const QString &id) const
+{
+ Q_ASSERT(m_helpEngine.has_value());
+ return transformQHelpLink(m_helpEngine->documentsForIdentifier(id));
+}
+
+std::vector<QQmlLSHelpProvider::DocumentLink>
+QQmlLSHelpProvider::documentsForIdentifier(const QString &id, const QString &filterName) const
+{
+ Q_ASSERT(m_helpEngine.has_value());
+ return transformQHelpLink(m_helpEngine->documentsForIdentifier(id, filterName));
+}
+
+std::vector<QQmlLSHelpProvider::DocumentLink>
+QQmlLSHelpProvider::documentsForKeyword(const QString &keyword) const
+{
+ Q_ASSERT(m_helpEngine.has_value());
+ return transformQHelpLink(m_helpEngine->documentsForKeyword(keyword));
+}
+
+std::vector<QQmlLSHelpProvider::DocumentLink>
+QQmlLSHelpProvider::documentsForKeyword(const QString &keyword, const QString &filter) const
+{
+ Q_ASSERT(m_helpEngine.has_value());
+ return transformQHelpLink(m_helpEngine->documentsForKeyword(keyword, filter));
+}
+
+QStringList QQmlLSHelpProvider::registeredNamespaces() const
+{
+ Q_ASSERT(m_helpEngine.has_value());
+ return m_helpEngine->registeredDocumentations();
+}
+
+QString QQmlLSHelpProvider::error() const
+{
+ Q_ASSERT(m_helpEngine.has_value());
+ return m_helpEngine->error();
+}
+
+QHelpEnginePlugin::QHelpEnginePlugin(QObject *parent) : QObject(parent) { }
+
+std::unique_ptr<QQmlLSHelpProviderBase> QHelpEnginePlugin::initialize(const QString &collectionFile,
+ QObject *parent)
+{
+ return std::make_unique<QQmlLSHelpProvider>(collectionFile, parent);
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qhelpengineplugin.cpp"
diff --git a/src/assistant/plugins/help/qhelpengineplugin.h b/src/assistant/plugins/help/qhelpengineplugin.h
new file mode 100644
index 000000000..9b17c2dbd
--- /dev/null
+++ b/src/assistant/plugins/help/qhelpengineplugin.h
@@ -0,0 +1,65 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QHELPENGINEPLUGIN_H
+#define QHELPENGINEPLUGIN_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qobject.h>
+#include <QtCore/qplugin.h>
+#include <QtHelp/qhelpenginecore.h>
+#include <QtHelp/qhelplink.h>
+
+#include <QtQmlLS/private/qqmllshelpplugininterface_p.h>
+
+#include <optional>
+#include <vector>
+
+QT_BEGIN_NAMESPACE
+
+// TODO (Qt 7.0)
+// Remove this plugin from QtTools when the QtHelp lib is split into
+// QtHelpCore and QtHelp. Then QmlLS can depend only on QtHelpCore.
+class QQmlLSHelpProvider : public QQmlLSHelpProviderBase
+{
+public:
+ QQmlLSHelpProvider(const QString &qhcFile, QObject *parent = nullptr);
+ bool registerDocumentation(const QString &documentationFileName) override;
+ [[nodiscard]] QByteArray fileData(const QUrl &url) const override;
+ [[nodiscard]] std::vector<DocumentLink> documentsForIdentifier(const QString &id) const override;
+ [[nodiscard]] std::vector<DocumentLink> documentsForIdentifier(const QString &id, const QString &filterName) const override;
+ [[nodiscard]] std::vector<DocumentLink> documentsForKeyword(const QString &keyword) const override;
+ [[nodiscard]] std::vector<DocumentLink> documentsForKeyword(const QString &keyword, const QString &filterName) const override;
+ [[nodiscard]] QStringList registeredNamespaces() const override;
+ [[nodiscard]] QString error() const override;
+
+private:
+ std::optional<QHelpEngineCore> m_helpEngine;
+};
+
+class QHelpEnginePlugin : public QObject, public QQmlLSHelpPluginInterface
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QQmlLSHelpPluginInterface_iid)
+ Q_INTERFACES(QQmlLSHelpPluginInterface)
+public:
+ QHelpEnginePlugin(QObject *parent = nullptr);
+ Q_DISABLE_COPY_MOVE(QHelpEnginePlugin)
+
+ std::unique_ptr<QQmlLSHelpProviderBase> initialize(const QString &collectionFile,
+ QObject *parent) override;
+};
+
+QT_END_NAMESPACE
+
+#endif // QHELPENGINEPLUGIN_H
diff --git a/src/designer/src/components/formeditor/deviceprofiledialog.cpp b/src/designer/src/components/formeditor/deviceprofiledialog.cpp
index 6deabbaa1..188e24cf0 100644
--- a/src/designer/src/components/formeditor/deviceprofiledialog.cpp
+++ b/src/designer/src/components/formeditor/deviceprofiledialog.cpp
@@ -44,7 +44,7 @@ namespace qdesigner_internal {
DeviceProfileDialog::DeviceProfileDialog(QDesignerDialogGuiInterface *dlgGui, QWidget *parent) :
QDialog(parent),
- m_ui(new Ui::DeviceProfileDialog),
+ m_ui(new QT_PREPEND_NAMESPACE(Ui)::DeviceProfileDialog),
m_dlgGui(dlgGui)
{
setModal(true);
diff --git a/src/designer/src/components/formeditor/formwindowsettings.cpp b/src/designer/src/components/formeditor/formwindowsettings.cpp
index df3fa01c2..ad0e32f48 100644
--- a/src/designer/src/components/formeditor/formwindowsettings.cpp
+++ b/src/designer/src/components/formeditor/formwindowsettings.cpp
@@ -143,7 +143,7 @@ void FormWindowData::applyToFormWindow(FormWindowBase* fw) const
FormWindowSettings::FormWindowSettings(QDesignerFormWindowInterface *parent) :
QDialog(parent),
- m_ui(new ::Ui::FormWindowSettings),
+ m_ui(new QT_PREPEND_NAMESPACE(Ui)::FormWindowSettings),
m_formWindow(qobject_cast<FormWindowBase*>(parent)),
m_oldData(new FormWindowData)
{
diff --git a/src/designer/src/components/formeditor/templateoptionspage.cpp b/src/designer/src/components/formeditor/templateoptionspage.cpp
index b54981272..2063972d9 100644
--- a/src/designer/src/components/formeditor/templateoptionspage.cpp
+++ b/src/designer/src/components/formeditor/templateoptionspage.cpp
@@ -20,7 +20,7 @@ namespace qdesigner_internal {
TemplateOptionsWidget::TemplateOptionsWidget(QDesignerFormEditorInterface *core, QWidget *parent) :
QWidget(parent),
m_core(core),
- m_ui(new Ui::TemplateOptionsWidget)
+ m_ui(new QT_PREPEND_NAMESPACE(qdesigner_internal)::Ui::TemplateOptionsWidget)
{
m_ui->setupUi(this);
diff --git a/src/designer/src/components/propertyeditor/designerpropertymanager.cpp b/src/designer/src/components/propertyeditor/designerpropertymanager.cpp
index 868087e2f..5bcf68c10 100644
--- a/src/designer/src/components/propertyeditor/designerpropertymanager.cpp
+++ b/src/designer/src/components/propertyeditor/designerpropertymanager.cpp
@@ -1739,6 +1739,8 @@ void DesignerPropertyManager::setValue(QtProperty *property, const QVariant &val
void DesignerPropertyManager::initializeProperty(QtProperty *property)
{
+ static bool creatingIconProperties = false;
+
m_resetMap[property] = false;
const int type = propertyType(property);
@@ -1753,8 +1755,10 @@ void DesignerPropertyManager::initializeProperty(QtProperty *property)
m_stringThemeAttributes[property] = false;
break;
case QMetaType::Int:
- m_intValues[property] = 0;
- m_intThemeEnumAttributes[property] = false;
+ if (creatingIconProperties) {
+ m_intValues[property] = 0;
+ m_intThemeEnumAttributes[property] = false;
+ }
break;
case QMetaType::UInt:
m_uintValues[property] = 0;
@@ -1803,6 +1807,7 @@ void DesignerPropertyManager::initializeProperty(QtProperty *property)
m_pixmapValues[property] = PropertySheetPixmapValue();
m_defaultPixmaps[property] = QPixmap();
} else if (type == designerIconTypeId()) {
+ creatingIconProperties = true;
m_iconValues[property] = PropertySheetIconValue();
m_defaultIcons[property] = QIcon();
@@ -1829,6 +1834,7 @@ void DesignerPropertyManager::initializeProperty(QtProperty *property)
createIconSubProperty(property, QIcon::Active, QIcon::On, tr("Active On"));
createIconSubProperty(property, QIcon::Selected, QIcon::Off, tr("Selected Off"));
createIconSubProperty(property, QIcon::Selected, QIcon::On, tr("Selected On"));
+ creatingIconProperties = false;
} else if (type == designerStringTypeId()) {
m_stringManager.initialize(this, property, PropertySheetStringValue());
m_stringAttributes.insert(property, ValidationMultiLine);
@@ -2105,8 +2111,11 @@ void DesignerEditorFactory::slotValueChanged(QtProperty *property, const QVarian
case QMetaType::QPalette:
applyToEditors(m_palettePropertyToEditors.value(property), &PaletteEditorButton::setPalette, qvariant_cast<QPalette>(value));
break;
- case QMetaType::Int:
- applyToEditors(m_intPropertyToComboEditors.value(property), &QComboBox::setCurrentIndex, value.toInt());
+ case QMetaType::Int: {
+ auto it = m_intPropertyToComboEditors.constFind(property);
+ if (it != m_intPropertyToComboEditors.cend())
+ applyToEditors(it.value(), &QComboBox::setCurrentIndex, value.toInt());
+ }
break;
case QMetaType::UInt:
applyToEditors(m_uintPropertyToEditors.value(property), &QLineEdit::setText, QString::number(value.toUInt()));
@@ -2204,6 +2213,8 @@ QWidget *DesignerEditorFactory::createEditor(QtVariantPropertyManager *manager,
m_intPropertyToComboEditors[property].append(ed);
m_comboEditorToIntProperty.insert(ed, property);
editor = ed;
+ } else {
+ editor = QtVariantEditorFactory::createEditor(manager, property, parent);
}
break;
case QMetaType::UInt: {
diff --git a/src/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp b/src/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp
index 6ac1638bc..a8972c332 100644
--- a/src/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp
+++ b/src/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp
@@ -18,7 +18,7 @@ NewDynamicPropertyDialog::NewDynamicPropertyDialog(QDesignerDialogGuiInterface *
QWidget *parent) :
QDialog(parent),
m_dialogGui(dialogGui),
- m_ui(new Ui::NewDynamicPropertyDialog)
+ m_ui(new QT_PREPEND_NAMESPACE(qdesigner_internal)::Ui::NewDynamicPropertyDialog)
{
m_ui->setupUi(this);
connect(m_ui->m_lineEdit, &QLineEdit::textChanged, this, &NewDynamicPropertyDialog::nameChanged);
diff --git a/src/designer/src/designer/doc/src/designer-manual.qdoc b/src/designer/src/designer/doc/src/designer-manual.qdoc
index 402c786ce..50a7835f1 100644
--- a/src/designer/src/designer/doc/src/designer-manual.qdoc
+++ b/src/designer/src/designer/doc/src/designer-manual.qdoc
@@ -1233,8 +1233,7 @@
checkboxes and radio buttons with similar purposes.
Among the significant properties of group boxes are \c title, \c flat,
- \c checkable, and \c checked. These are demonstrated in the
- \l{widgets/groupbox}{Group Box} example, and described in the QGroupBox
+ \c checkable, and \c checked, as described in the \l QGroupBox
class documentation. Each group box can contain its own layout, and
this is necessary if it contains other widgets. To add a layout to the
group box, click inside it and apply the layout as usual.
diff --git a/src/designer/src/designer/preferencesdialog.cpp b/src/designer/src/designer/preferencesdialog.cpp
index 6c597c6a0..eac6e82dd 100644
--- a/src/designer/src/designer/preferencesdialog.cpp
+++ b/src/designer/src/designer/preferencesdialog.cpp
@@ -15,7 +15,7 @@ QT_BEGIN_NAMESPACE
PreferencesDialog::PreferencesDialog(QDesignerFormEditorInterface *core, QWidget *parentWidget) :
QDialog(parentWidget),
- m_ui(new Ui::PreferencesDialog()),
+ m_ui(new QT_PREPEND_NAMESPACE(Ui)::PreferencesDialog()),
m_core(core)
{
m_ui->setupUi(this);
diff --git a/src/designer/src/designer/qdesigner_appearanceoptions.cpp b/src/designer/src/designer/qdesigner_appearanceoptions.cpp
index 4c68a4445..a4e062145 100644
--- a/src/designer/src/designer/qdesigner_appearanceoptions.cpp
+++ b/src/designer/src/designer/qdesigner_appearanceoptions.cpp
@@ -29,7 +29,7 @@ void AppearanceOptions::fromSettings(const QDesignerSettings &settings)
// ---------------- QDesignerAppearanceOptionsWidget
QDesignerAppearanceOptionsWidget::QDesignerAppearanceOptionsWidget(QWidget *parent) :
QWidget(parent),
- m_ui(new Ui::AppearanceOptionsWidget)
+ m_ui(new QT_PREPEND_NAMESPACE(Ui)::AppearanceOptionsWidget)
{
m_ui->setupUi(this);
diff --git a/src/designer/src/lib/CMakeLists.txt b/src/designer/src/lib/CMakeLists.txt
index 661e5a995..43a1964d9 100644
--- a/src/designer/src/lib/CMakeLists.txt
+++ b/src/designer/src/lib/CMakeLists.txt
@@ -412,11 +412,23 @@ qt_internal_extend_target(Designer CONDITION NOT QT_BUILD_SHARED_LIBS
../../../shared/qtpropertybrowser
)
+if(TARGET zstd::libzstd)
+ qt_internal_disable_find_package_global_promotion(zstd::libzstd)
+endif()
if(TARGET zstd::libzstd_shared)
qt_internal_disable_find_package_global_promotion(zstd::libzstd_shared)
endif()
+if(TARGET zstd::libzstd_static)
+ qt_internal_disable_find_package_global_promotion(zstd::libzstd_static)
+endif()
if(NOT TARGET WrapZSTD::WrapZSTD)
- qt_find_package(WrapZSTD 1.3 PROVIDED_TARGETS WrapZSTD::WrapZSTD)
+ qt_find_package(WrapZSTD 1.3
+ PROVIDED_TARGETS
+ WrapZSTD::WrapZSTD
+ zstd::libzstd
+ zstd::libzstd_static
+ zstd::libzstd_shared
+ )
endif()
qt_internal_extend_target(Designer CONDITION QT_FEATURE_zstd
diff --git a/src/designer/src/lib/shared/gridpanel.cpp b/src/designer/src/lib/shared/gridpanel.cpp
index 645c79935..a5f6ae654 100644
--- a/src/designer/src/lib/shared/gridpanel.cpp
+++ b/src/designer/src/lib/shared/gridpanel.cpp
@@ -12,7 +12,7 @@ namespace qdesigner_internal {
GridPanel::GridPanel(QWidget *parentWidget) :
QWidget(parentWidget)
{
- m_ui = new Ui::GridPanel;
+ m_ui = new QT_PREPEND_NAMESPACE(qdesigner_internal)::Ui::GridPanel;
m_ui->setupUi(this);
connect(m_ui->m_resetButton, &QAbstractButton::clicked, this, &GridPanel::reset);
diff --git a/src/designer/src/lib/shared/newactiondialog.cpp b/src/designer/src/lib/shared/newactiondialog.cpp
index 2aea8bb57..5bbb5d725 100644
--- a/src/designer/src/lib/shared/newactiondialog.cpp
+++ b/src/designer/src/lib/shared/newactiondialog.cpp
@@ -44,7 +44,7 @@ unsigned ActionData::compare(const ActionData &rhs) const
// -------------------- NewActionDialog
NewActionDialog::NewActionDialog(ActionEditor *parent) :
QDialog(parent, Qt::Sheet),
- m_ui(new Ui::NewActionDialog),
+ m_ui(new QT_PREPEND_NAMESPACE(qdesigner_internal)::Ui::NewActionDialog),
m_actionEditor(parent),
m_autoUpdateObjectName(true)
{
diff --git a/src/designer/src/lib/shared/newformwidget.cpp b/src/designer/src/lib/shared/newformwidget.cpp
index 1cf1c8bfb..383b3fc5a 100644
--- a/src/designer/src/lib/shared/newformwidget.cpp
+++ b/src/designer/src/lib/shared/newformwidget.cpp
@@ -102,7 +102,7 @@ static const struct TemplateSize templateSizes[] =
NewFormWidget::NewFormWidget(QDesignerFormEditorInterface *core, QWidget *parentWidget) :
QDesignerNewFormWidgetInterface(parentWidget),
m_core(core),
- m_ui(new Ui::NewFormWidget),
+ m_ui(new QT_PREPEND_NAMESPACE(qdesigner_internal)::Ui::NewFormWidget),
m_currentItem(nullptr),
m_acceptedItem(nullptr)
{
diff --git a/src/designer/src/lib/shared/orderdialog.cpp b/src/designer/src/lib/shared/orderdialog.cpp
index be94b512d..faa13501a 100644
--- a/src/designer/src/lib/shared/orderdialog.cpp
+++ b/src/designer/src/lib/shared/orderdialog.cpp
@@ -21,7 +21,7 @@ namespace qdesigner_internal {
OrderDialog::OrderDialog(QWidget *parent) :
QDialog(parent),
- m_ui(new Ui::OrderDialog),
+ m_ui(new QT_PREPEND_NAMESPACE(qdesigner_internal)::Ui::OrderDialog),
m_format(PageOrderFormat)
{
m_ui->setupUi(this);
diff --git a/src/qdoc/qdoc/doc/examples/qml.qdoc.sample b/src/qdoc/qdoc/doc/examples/qml.qdoc.sample
index e0f9a66b9..e2c1277d2 100644
--- a/src/qdoc/qdoc/doc/examples/qml.qdoc.sample
+++ b/src/qdoc/qdoc/doc/examples/qml.qdoc.sample
@@ -3,7 +3,7 @@
//![qmltype]
\qmltype TextEdit
- \instantiates QQuickTextEdit
+ \nativetype QQuickTextEdit
\inqmlmodule QtQuick
\ingroup qtquick-visual
\ingroup qtquick-input
diff --git a/src/qdoc/qdoc/doc/qdoc-guide/qdoc-guide.qdoc b/src/qdoc/qdoc/doc/qdoc-guide/qdoc-guide.qdoc
index 9bf6aa63a..ff9ac808c 100644
--- a/src/qdoc/qdoc/doc/qdoc-guide/qdoc-guide.qdoc
+++ b/src/qdoc/qdoc/doc/qdoc-guide/qdoc-guide.qdoc
@@ -480,7 +480,7 @@
\li \l{inherits-command}{\\inherits}
\li \l{qmlmodule-command}{\\qmlmodule}
\li \l{inqmlmodule-command}{\\inqmlmodule}
- \li \l{instantiates-command}{\\instantiates}
+ \li \l{nativetype-command}{\\nativetype}
\endlist
@@ -495,7 +495,7 @@
If your QML type is defined in a \e qml file, document it there.
If your QML type is represented by a C++ class, document it in the
\e cpp file for that C++ class and include an
- \l{instantiates-command}{\\instantiates} command to specify the
+ \l{nativetype-command}{\\nativetype} command to specify the
name of the C++ class. Don't document a QML type in a \e{cpp} file
if the QML type is defined in a \e{qml} file.
diff --git a/src/qdoc/qdoc/doc/qdoc-guide/qtwritingstyle-qml.qdoc b/src/qdoc/qdoc/doc/qdoc-guide/qtwritingstyle-qml.qdoc
index cbf76b175..91d2094cb 100644
--- a/src/qdoc/qdoc/doc/qdoc-guide/qtwritingstyle-qml.qdoc
+++ b/src/qdoc/qdoc/doc/qdoc-guide/qtwritingstyle-qml.qdoc
@@ -22,7 +22,7 @@ documented with the QML \l{topic-commands}{topic commands}:
\li \l{qmlsignal-command}{\\qmlsignal}
\li \l{qmlmodule-command}{\\qmlmodule}
\li \l{inqmlmodule-command}{\\inqmlmodule}
-\li \l{instantiates-command}{\\instantiates}
+\li \l{nativetype-command}{\\nativetype}
\endlist
For QML types defined in \c .qml files, QDoc will parse the QML and determine
@@ -38,7 +38,7 @@ The \l{qmltype-command}{\\qmltype} command is for QML type documentation.
\snippet examples/qml.qdoc.sample qmltype
-The \l{instantiates-command}{\\instantiates} accepts the C++ class which
+The \l{nativetype-command}{\\nativetype} command accepts the C++ class which
implements the QML type as the argument. For types implemented in QML, this
is not needed.
diff --git a/src/qdoc/qdoc/doc/qdoc-manual-cmdindex.qdoc b/src/qdoc/qdoc/doc/qdoc-manual-cmdindex.qdoc
index fcab7f316..773ec1cfb 100644
--- a/src/qdoc/qdoc/doc/qdoc-manual-cmdindex.qdoc
+++ b/src/qdoc/qdoc/doc/qdoc-manual-cmdindex.qdoc
@@ -55,7 +55,7 @@
\li \l {inlineimage-command} {\\inlineimage}
\li \l {inmodule-command} {\\inmodule}
\li \l {inqmlmodule-command} {\\inqmlmodule}
- \li \l {instantiates-command} {\\instantiates}
+ \li \l {instantiates-command} {\\instantiates} (deprecated, use \\nativetype)
\li \l {internal-command} {\\internal}
\li \l {keyword-command} {\\keyword}
\li \l {l-command} {\\l}
@@ -67,6 +67,7 @@
\li \l {module-command} {\\module}
\li \l {modulestate-command} {\\modulestate}
\li \l {namespace-command} {\\namespace}
+ \li \l {nativetype-command} {\\nativetype}
\li \l {nextpage-command} {\\nextpage}
\li \l {noautolist-command} {\\noautolist}
\li \l {nonreentrant-command} {\\nonreentrant}
@@ -128,6 +129,7 @@
\li \l {target-command} {\\target}
\li \l {threadsafe-command} {\\threadsafe}
\li \l {title-command} {\\title}
+ \li \qdoccmd tm
\li \l {tt-command} {\\tt}
\li \l {typealias-command} {\\typealias}
\li \l {typedef-command} {\\typedef}
diff --git a/src/qdoc/qdoc/doc/qdoc-manual-contextcmds.qdoc b/src/qdoc/qdoc/doc/qdoc-manual-contextcmds.qdoc
index bc5e36532..7c62c08bd 100644
--- a/src/qdoc/qdoc/doc/qdoc-manual-contextcmds.qdoc
+++ b/src/qdoc/qdoc/doc/qdoc-manual-contextcmds.qdoc
@@ -703,7 +703,7 @@
\badcode *
/\1!
\qmltype PauseAnimation
- \instantiates QDeclarativePauseAnimation
+ \nativetype QDeclarativePauseAnimation
\ingroup qml-animation-transition
\since 4.7
\inherits Animation
diff --git a/src/qdoc/qdoc/doc/qdoc-manual-macros.qdoc b/src/qdoc/qdoc/doc/qdoc-manual-macros.qdoc
index 78b56068e..2d65b540b 100644
--- a/src/qdoc/qdoc/doc/qdoc-manual-macros.qdoc
+++ b/src/qdoc/qdoc/doc/qdoc-manual-macros.qdoc
@@ -193,6 +193,18 @@
\li Macro
\li Expands To
\row
+ \li \\B2Q
+ \li Boot to Qt
+ \row
+ \li \\B2QSS
+ \li Boot to Qt Software Stack
+ \row
+ \li \\B2QST
+ \li Boot to Qt Startup Screen
+ \row
+ \li \\IFW
+ \li Qt Installer Framework
+ \row
\li \\macos
\li macOS
\row
@@ -214,6 +226,9 @@
\li \\QBXD
\li Qt Bridge for Adobe XD
\row
+ \li \\QC
+ \li Qt Creator
+ \row
\li \\QD
\li Qt Widgets Designer
\row
@@ -223,6 +238,9 @@
\li \\QDV
\li Qt Design Viewer
\row
+ \li \\QfP
+ \li Qt for Python
+ \row
\li \\QL
\li Qt Linguist
\row
@@ -232,18 +250,27 @@
\li \\QMLLS
\li QML Language Server
\row
+ \li \\QMLP
+ \li QML Profiler
+ \row
\li \\QMT
\li Qt Maintenance Tool
\row
\li \\QOI
\li Qt Online Installer
\row
+ \li \\QQEM
+ \li Qt Quick Effect Maker
+ \row
\li \\QQV
\li Qt QML Viewer
\row
\li \\QtAA
\li Qt for Android Automotive
\row
+ \li \\QtTAS
+ \li Qt Tools for Android Studio
+ \row
\li \\QUL
\li Qt Quick Ultralite
\endtable
diff --git a/src/qdoc/qdoc/doc/qdoc-manual-markupcmds.qdoc b/src/qdoc/qdoc/doc/qdoc-manual-markupcmds.qdoc
index bd31bdc07..636e6f868 100644
--- a/src/qdoc/qdoc/doc/qdoc-manual-markupcmds.qdoc
+++ b/src/qdoc/qdoc/doc/qdoc-manual-markupcmds.qdoc
@@ -72,6 +72,7 @@
\li \l {table-command} {\\table}
\li \l {tableofcontents-command} {\\tableofcontents}
\li \l {target-command} {\\target}
+ \li \qdoccmd tm
\li \l {tt-command} {\\tt}
\li \l {uicontrol-command} {\\uicontrol}
\li \l {underline-command} {\\underline}
@@ -320,6 +321,29 @@
See also \l {div-command} {\\div}.
+ \target tm-command
+ \section1 \\tm (trademark)
+
+ The \\tm command indicates that its argument is a trademark. QDoc appends
+ a trademark symbol `™` to the first occurrence of the argument when
+ generating a page.
+
+ In the project's configuration, the \c navigation.trademarkspage variable
+ is used for defining a title of a page that contains trademark-related
+ documentation.
+
+ \badcode
+ navigation.trademarkspage = Trademarks
+ \endcode
+
+ If set, each occurrence of the trademark symbol also links to the
+ trademarks page.
+
+ \note In section titles, the \\tm command is ignored and its argument
+ rendered as-is.
+
+ See also \l {sectionOne-command}{\\section1} and \qdocvar {navigation}.
+
\target tt-command
\section1 \\tt (teletype font)
diff --git a/src/qdoc/qdoc/doc/qdoc-manual-qdocconf.qdoc b/src/qdoc/qdoc/doc/qdoc-manual-qdocconf.qdoc
index eb05a1758..d6fc3305e 100644
--- a/src/qdoc/qdoc/doc/qdoc-manual-qdocconf.qdoc
+++ b/src/qdoc/qdoc/doc/qdoc-manual-qdocconf.qdoc
@@ -1045,6 +1045,9 @@
\row \li \c navigation.toctitles.inclusive (Since QDoc 6.3)
\li If set to \c true, page(s) listed in \c navigation.toctitles
will also appear in the navigation bar as a root item.
+ \row \li \c navigation.trademarkspage (Since QDoc 6.8)
+ \li Title of a page that documents trademarks mentioned in the
+ documentation. See also \qdoccmd tm command.
\endtable
For example:
@@ -1139,40 +1142,53 @@
\section1 outputprefixes
The \c outputprefixes variable specifies a mapping between types of files
- and the prefixes to prepend to the HTML file names in the generated
+ and the prefixes to prepend to the output file names in the generated
documentation.
+ QDoc supports adding an output prefix to the file names of QML type, C++
+ class, namespace, and header file reference pages.
+
\badcode
- outputprefixes = QML
+ outputprefixes = QML CPP
outputprefixes.QML = uicomponents-
+ outputprefixes.CPP = components-
\endcode
By default, files containing the API documentation for QML types
- are prefixed with "qml-". In the above example, the prefix \c
- "uicomponents" is used instead.
+ are prefixed with \c {qml-}. In the above example, the prefix \c
+ {uicomponents-} is used instead.
- The output prefix is applied to file names for documentation on
- QML.
+ Likewise, C++ type documentation pages are prefixed with \c {components-}
+ in the above example. By default, C++ type pages have no prefix.
\target outputsuffixes-variable
\section1 outputsuffixes
The \c outputsuffixes variable specifies a mapping between types of
- files and module name suffixes to append to the HTML file names.
+ files and suffixes to apply to the module or type name as they appear
+ in the output file names.
+
+ QDoc supports adding an output suffix to the file names of module pages,
+ QML type, C++ class, namespace, and header file reference pages.
+
+ By default, no suffix is used. The QML output suffix, if defined, is
+ applied as a suffix to the module name as it appears in the file names
+ of QML type and QML module pages.
+
+ File names for C++ types do not include the module name. The CPP
+ output suffix, if defined, is applied as a suffix for the type name.
\badcode
- outputsuffixes = QML
- outputsuffixes.QML = -tp
+ outputsuffixes = QML CPP
+ {outputsuffixes.QML,outputsuffixes.CPP} = -tp
\endcode
- Given a QML module name \e FooBar and the default
- \l {outputprefixes-variable}{output prefix} ("qml-"), the file name of
- the generated HTML page for a QML type \e FooWidget would be
+ With the definitions above, given a QML module name \e FooBar and the default
+ \l {outputprefixes-variable}{output prefix} (\c {qml-}), the name of
+ the generated file for a QML type \e FooWidget is
\c qml-foobar-tp-foowidget.html.
- By default, no suffix is used. The output suffix, if defined, is
- applied to file names for documentation on QML and its module
- page.
+ Likewise, for a C++ class \e QFoobar, QDoc generates \c qfoobar-tp.html.
The \c outputsuffixes variable was introduced in QDoc 5.6.
diff --git a/src/qdoc/qdoc/doc/qdoc-manual-topiccmds.qdoc b/src/qdoc/qdoc/doc/qdoc-manual-topiccmds.qdoc
index e03ea7b28..c1e6c2e5c 100644
--- a/src/qdoc/qdoc/doc/qdoc-manual-topiccmds.qdoc
+++ b/src/qdoc/qdoc/doc/qdoc-manual-topiccmds.qdoc
@@ -735,9 +735,8 @@
The \\qmltype command is for documenting a QML type. The command
has one argument, which is the name of the QML type.
- If the QML type is instantiated by a C++ class, that class must be
- specified using the \l{instantiates-command} {\\instantiates}
- context command.
+ If the QML type has an equivalent C++ class, you can specify that class
+ with the \qdoccmd nativetype context command.
The \l {inqmlmodule-command}{\\inqmlmodule} command documents the
QML module the type belongs to. The argument passed to this command
@@ -747,7 +746,7 @@
\badcode *
/\1!
\qmltype Transform
- \instantiates QGraphicsTransform
+ \nativetype QGraphicsTransform
\inqmlmodule QtQuick
\brief Provides a way to build advanced transformations on Items.
@@ -757,9 +756,9 @@
\1/
\endcode
- Here, the \e{\\qmltype} comment includes \l{instantiates-command}
- {\\instantiates} to specify that a Transform is instantiated by
- the C++ class QGraphicsTransform. A \\qmltype comment should
+ Here, the \e{\\qmltype} comment includes \qdoccmd nativetype
+ to specify that a Transform is the QML counterpart to the
+ C++ class QGraphicsTransform. A \\qmltype comment should
always include a \l {since-command} {\\since} command, because all
QML types are new. It should also include a \l{brief-command}
{\\brief} description. If a QML type is a member of a QML type group,
@@ -895,17 +894,32 @@
\target instantiates-command
\section1 \\instantiates
- The \\instantiates command is used in the \l{qmltype-command} {QML
- type} comment of an elemental QML type to specify the name of the
- C++ class that instantiates the QML type.
+ The \\instantiates command is deprecated since Qt 6.8.
+ Use \qdoccmd nativetype instead.
- If the QML type is not instantiated by a C++ class, this command
- is not used.
+
+ \target nativetype-command
+ \section1 \\nativetype
+
+ The \\nativetype-command must be used in conjunction with the
+ \qdoccmd qmltype topic command. The command takes a C++ class as its
+ argument. If QDoc cannot find the C++ class, it issues a warning. This
+ command was introduced with Qt 6.8.
+
+ Use the \\nativetype-command to specify what the type is called in C++.
+ This ensures that the requisites block generated in the documentation for
+ the QML type contains an "In C++" entry. The C++ class will have a
+ corresponding "In QML" entry.
+
+ Any one QML type can only have one native type. QDoc issues a warning if
+ redefinition occurs. However, multiple QML types can have the same C++
+ class as their native type. The C++ class documentation will contain a list
+ of all corresponding types in QML.
\badcode *
/\1!
\qmltype Transform
- \instantiates QGraphicsTransform
+ \nativetype QGraphicsTransform
\inqmlmodule QtQuick
\brief Provides a way to build advanced transformations on Items.
@@ -915,9 +929,9 @@
\1/
\endcode
- Here, the \e{\\qmltype} comment includes \l{instantiates-command}
- {\\instantiates} to specify that a Transform is instantiated by
- the C++ class QGraphicsTransform.
+ Here, the \e{\\qmltype} topic includes \e{\\nativetype} to specify that a
+ Transform is called QGraphicsTransform in C++.
+
\target typealias-command
\section1 \\typealias
diff --git a/src/qdoc/qdoc/doc/qdoc-warnings.qdoc b/src/qdoc/qdoc/doc/qdoc-warnings.qdoc
index 1be57f03d..d5d399a05 100644
--- a/src/qdoc/qdoc/doc/qdoc-warnings.qdoc
+++ b/src/qdoc/qdoc/doc/qdoc-warnings.qdoc
@@ -137,19 +137,12 @@
fully qualified with the scope of the class that declares
the function.
- \section1 C++ class <ClassName> not found: \\instantiates <ClassName>
+ \section1 QML type <TypeName> documented with <ClassName> as its native type. Replacing <ClassName> with <OtherClass>
+ If the \qdoccmd nativetype command is used with the same argument in
+ multiple QML type documentation comments that belong to the same
+ documentation project, QDoc issues this warning. To resolve this, ensure
+ that you use the \c {\nativetype} command only once for each C++ class.
- If you describe a QML type, you may specify the class it instantiates.
- Refer to the \l{instantiates-command}{\\instantiates} command in the
- \l {QDoc manual}.
-
- QDoc issues this warning if it failed to locate the documentation for the
- C++ class <ClassName>. Either the class is undocumented, it is marked
- \l {internal-command}{\\internal}, or it originates from another
- documentation module and QDoc did not locate an index file for the
- corresponding dependency.
-
- See also \l {depends-variable}{depends}.
\section1 Cannot tie this documentation to anything
@@ -316,10 +309,10 @@
\inherits Foo
\endcode
- \section1 \\instantiates is only allowed in \\qmltype
+ \section1 \\nativetype is only allowed in \\qmltype
- The \l{instantiates-command}{\\instantiates} command can only be used in a QDoc comment
- that documents a QML type.
+ The \l{nativetype-command}{\\nativetype} command can only be used in a QDoc
+ comment that documents a QML type.
\section1 All properties in a group must belong to the same type: <name>
@@ -618,14 +611,14 @@
Incorrect:
\badcode
\qmltype ItemSelectionModel
- \instantiates QItemSelectionModel
+ \nativetype QItemSelectionModel
\since 5.5
\ingroup qtquick-models
\endcode
Correct:
\badcode
\qmltype ItemSelectionModel
- \instantiates QItemSelectionModel
+ \nativetype QItemSelectionModel
\inqmlmodule QtQml.Models
\since 5.5
\ingroup qtquick-models
diff --git a/src/qdoc/qdoc/src/qdoc/atom.h b/src/qdoc/qdoc/src/qdoc/atom.h
index dbfd0c4a9..21624e27e 100644
--- a/src/qdoc/qdoc/src/qdoc/atom.h
+++ b/src/qdoc/qdoc/src/qdoc/atom.h
@@ -203,6 +203,7 @@ protected:
#define ATOM_FORMATTING_SUBSCRIPT "subscript"
#define ATOM_FORMATTING_SUPERSCRIPT "superscript"
#define ATOM_FORMATTING_TELETYPE "teletype"
+#define ATOM_FORMATTING_TRADEMARK "trademark"
#define ATOM_FORMATTING_UICONTROL "uicontrol"
#define ATOM_FORMATTING_UNDERLINE "underline"
diff --git a/src/qdoc/qdoc/src/qdoc/classnode.cpp b/src/qdoc/qdoc/src/qdoc/classnode.cpp
index f6de10f78..1b132f91e 100644
--- a/src/qdoc/qdoc/src/qdoc/classnode.cpp
+++ b/src/qdoc/qdoc/src/qdoc/classnode.cpp
@@ -90,37 +90,6 @@ PropertyNode *ClassNode::findPropertyNode(const QString &name)
}
/*!
- This function does a recursive search of this class node's
- base classes looking for one that has a QML element. If it
- finds one, it returns the pointer to that QML element. If
- it doesn't find one, it returns null.
- */
-QmlTypeNode *ClassNode::findQmlBaseNode()
-{
- QmlTypeNode *result = nullptr;
- const QList<RelatedClass> &bases = baseClasses();
-
- if (!bases.isEmpty()) {
- for (const RelatedClass &base : bases) {
- ClassNode *cn = base.m_node;
- if (cn && cn->qmlElement()) {
- return cn->qmlElement();
- }
- }
- for (const RelatedClass &base : bases) {
- ClassNode *cn = base.m_node;
- if (cn) {
- result = cn->findQmlBaseNode();
- if (result != nullptr) {
- return result;
- }
- }
- }
- }
- return result;
-}
-
-/*!
\a fn is an overriding function in this class or in a class
derived from this class. Find the node for the function that
\a fn overrides in this class's children or in one of this
diff --git a/src/qdoc/qdoc/src/qdoc/classnode.h b/src/qdoc/qdoc/src/qdoc/classnode.h
index d5efe51f4..1ac944a34 100644
--- a/src/qdoc/qdoc/src/qdoc/classnode.h
+++ b/src/qdoc/qdoc/src/qdoc/classnode.h
@@ -41,16 +41,17 @@ public:
[[nodiscard]] const QList<RelatedClass> &baseClasses() const { return m_bases; }
- QmlTypeNode *qmlElement() { return m_qmlElement; }
- void setQmlElement(QmlTypeNode *qcn) { m_qmlElement = qcn; }
[[nodiscard]] bool isAbstract() const override { return m_abstract; }
void setAbstract(bool b) override { m_abstract = b; }
PropertyNode *findPropertyNode(const QString &name);
- QmlTypeNode *findQmlBaseNode();
FunctionNode *findOverriddenFunction(const FunctionNode *fn);
PropertyNode *findOverriddenProperty(const FunctionNode *fn);
[[nodiscard]] bool docMustBeGenerated() const override;
+ void insertQmlNativeType(QmlTypeNode *qmlTypeNode) { m_nativeTypeForQml << qmlTypeNode; }
+ bool isQmlNativeType() { return !m_nativeTypeForQml.empty(); }
+ const QSet<QmlTypeNode *> &qmlNativeTypes() { return m_nativeTypeForQml; }
+
private:
void promotePublicBases(const QList<RelatedClass> &bases);
@@ -60,7 +61,7 @@ private:
QList<RelatedClass> m_ignoredBases {};
bool m_abstract { false };
bool m_wrapper { false };
- QmlTypeNode *m_qmlElement { nullptr };
+ QSet<QmlTypeNode *> m_nativeTypeForQml;
};
QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/codeparser.h b/src/qdoc/qdoc/src/qdoc/codeparser.h
index 6357b3a21..51d1ac2a4 100644
--- a/src/qdoc/qdoc/src/qdoc/codeparser.h
+++ b/src/qdoc/qdoc/src/qdoc/codeparser.h
@@ -51,9 +51,10 @@ QT_BEGIN_NAMESPACE
#define COMMAND_QMLDEFAULT QLatin1String("qmldefault")
#define COMMAND_QMLENUMERATORSFROM QLatin1String("qmlenumeratorsfrom")
#define COMMAND_QMLINHERITS QLatin1String("inherits")
-#define COMMAND_QMLINSTANTIATES QLatin1String("instantiates")
+#define COMMAND_QMLINSTANTIATES QLatin1String("instantiates") // TODO Qt 7.0.0 - Remove: Deprecated since 6.8.
#define COMMAND_QMLMETHOD QLatin1String("qmlmethod")
#define COMMAND_QMLMODULE QLatin1String("qmlmodule")
+#define COMMAND_QMLNATIVETYPE QLatin1String("nativetype")
#define COMMAND_QMLPROPERTY QLatin1String("qmlproperty")
#define COMMAND_QMLPROPERTYGROUP QLatin1String("qmlpropertygroup")
#define COMMAND_QMLREADONLY QLatin1String("readonly")
diff --git a/src/qdoc/qdoc/src/qdoc/config.cpp b/src/qdoc/qdoc/src/qdoc/config.cpp
index c60ef9fac..de987dae8 100644
--- a/src/qdoc/qdoc/src/qdoc/config.cpp
+++ b/src/qdoc/qdoc/src/qdoc/config.cpp
@@ -80,6 +80,7 @@ QString ConfigStrings::TABSIZE = QStringLiteral("tabsize");
QString ConfigStrings::TAGFILE = QStringLiteral("tagfile");
QString ConfigStrings::TIMESTAMPS = QStringLiteral("timestamps");
QString ConfigStrings::TOCTITLES = QStringLiteral("toctitles");
+QString ConfigStrings::TRADEMARKSPAGE = QStringLiteral("trademarkspage");
QString ConfigStrings::URL = QStringLiteral("url");
QString ConfigStrings::VERSION = QStringLiteral("version");
QString ConfigStrings::VERSIONSYM = QStringLiteral("versionsym");
diff --git a/src/qdoc/qdoc/src/qdoc/config.h b/src/qdoc/qdoc/src/qdoc/config.h
index d8ff80a40..30dad4746 100644
--- a/src/qdoc/qdoc/src/qdoc/config.h
+++ b/src/qdoc/qdoc/src/qdoc/config.h
@@ -307,6 +307,7 @@ struct ConfigStrings
static QString TAGFILE;
static QString TIMESTAMPS;
static QString TOCTITLES;
+ static QString TRADEMARKSPAGE;
static QString URL;
static QString VERSION;
static QString VERSIONSYM;
@@ -383,6 +384,7 @@ struct ConfigStrings
#define CONFIG_TAGFILE ConfigStrings::TAGFILE
#define CONFIG_TIMESTAMPS ConfigStrings::TIMESTAMPS
#define CONFIG_TOCTITLES ConfigStrings::TOCTITLES
+#define CONFIG_TRADEMARKSPAGE ConfigStrings::TRADEMARKSPAGE
#define CONFIG_URL ConfigStrings::URL
#define CONFIG_VERSION ConfigStrings::VERSION
#define CONFIG_VERSIONSYM ConfigStrings::VERSIONSYM
diff --git a/src/qdoc/qdoc/src/qdoc/cppcodeparser.cpp b/src/qdoc/qdoc/src/qdoc/cppcodeparser.cpp
index 82bc09064..d2e8d7c63 100644
--- a/src/qdoc/qdoc/src/qdoc/cppcodeparser.cpp
+++ b/src/qdoc/qdoc/src/qdoc/cppcodeparser.cpp
@@ -435,21 +435,11 @@ void CppCodeParser::processMetaCommand(const Doc &doc, const QString &command,
auto *qmlType = static_cast<QmlTypeNode *>(node);
qmlType->setQmlBaseName(arg);
}
- } else if (command == COMMAND_QMLINSTANTIATES) {
- if (node->isQmlType()) {
- ClassNode *classNode = database->findClassNode(arg.split("::"));
- if (classNode)
- node->setClassNode(classNode);
- else if (m_showLinkErrors) {
- doc.location().warning(
- QStringLiteral("C++ class %2 not found: \\%1 %2")
- .arg(command, arg));
- }
- } else {
- doc.location().warning(
- QStringLiteral("\\%1 is only allowed in \\%2")
- .arg(command, COMMAND_QMLTYPE));
- }
+ } else if (command == COMMAND_QMLNATIVETYPE || command == COMMAND_QMLINSTANTIATES) {
+ if (command == COMMAND_QMLINSTANTIATES)
+ doc.location().report(u"\\instantiates is deprected and will be removed in a future version. Use \\nativetype instead."_s);
+ // TODO: COMMAND_QMLINSTANTIATES is deprecated since 6.8. Its remains should be removed no later than Qt 7.0.0.
+ processQmlNativeTypeCommand(node, arg, doc.location());
} else if (command == COMMAND_DEFAULT) {
if (!node->isQmlProperty()) {
doc.location().warning(QStringLiteral("Ignored '\\%1', applies only to '\\%2'")
@@ -994,4 +984,38 @@ void CppCodeParser::processMetaCommands(const std::vector<TiedDocumentation> &ti
}
}
+void CppCodeParser::processQmlNativeTypeCommand(Node *node, const QString &arg, const Location &location)
+{
+ Q_ASSERT(node);
+ if (!node->isQmlNode()) {
+ location.warning(
+ QStringLiteral("Command '\\%1' is only meaningful in '\\%2'")
+ .arg(COMMAND_QMLNATIVETYPE, COMMAND_QMLTYPE));
+ return;
+ }
+
+ auto qmlNode = static_cast<QmlTypeNode *>(node);
+
+ QDocDatabase *database = QDocDatabase::qdocDB();
+ auto classNode = database->findClassNode(arg.split(u"::"_s));
+
+ if (!classNode) {
+ if (m_showLinkErrors) {
+ location.warning(
+ QStringLiteral("C++ class %2 not found: \\%1 %2")
+ .arg(COMMAND_QMLNATIVETYPE, arg));
+ }
+ return;
+ }
+
+ if (qmlNode->classNode()) {
+ location.warning(
+ QStringLiteral("QML type %1 documented with %2 as its native type. Replacing %2 with %3")
+ .arg(qmlNode->name(), qmlNode->classNode()->name(), arg));
+ }
+
+ qmlNode->setClassNode(classNode);
+ classNode->insertQmlNativeType(qmlNode);
+}
+
QT_END_NAMESPACE
diff --git a/src/qdoc/qdoc/src/qdoc/cppcodeparser.h b/src/qdoc/qdoc/src/qdoc/cppcodeparser.h
index 621dcf3a8..32e11d05b 100644
--- a/src/qdoc/qdoc/src/qdoc/cppcodeparser.h
+++ b/src/qdoc/qdoc/src/qdoc/cppcodeparser.h
@@ -33,10 +33,10 @@ public:
static inline const QSet<QString> meta_commands = QSet<QString>(CodeParser::common_meta_commands)
<< COMMAND_COMPARES << COMMAND_COMPARESWITH << COMMAND_INHEADERFILE
<< COMMAND_NEXTPAGE << COMMAND_OVERLOAD << COMMAND_PREVIOUSPAGE
- << COMMAND_QMLINSTANTIATES << COMMAND_REIMP << COMMAND_RELATES;
+ << COMMAND_QMLINSTANTIATES << COMMAND_QMLNATIVETYPE << COMMAND_REIMP << COMMAND_RELATES;
public:
- CppCodeParser(FnCommandParser&& parser);
+ explicit CppCodeParser(FnCommandParser&& parser);
FunctionNode *parseMacroArg(const Location &location, const QString &macroArg);
FunctionNode *parseOtherFuncArg(const QString &topic, const Location &location,
@@ -62,6 +62,7 @@ protected:
private:
void setExampleFileLists(ExampleNode *en);
static void processComparesCommand(Node *node, const QString &arg, const Location &loc);
+ void processQmlNativeTypeCommand(Node *node, const QString &arg, const Location &loc);
private:
FnCommandParser fn_parser;
diff --git a/src/qdoc/qdoc/src/qdoc/docbookgenerator.cpp b/src/qdoc/qdoc/src/qdoc/docbookgenerator.cpp
index 9e99b3b15..212ce06a2 100644
--- a/src/qdoc/qdoc/src/qdoc/docbookgenerator.cpp
+++ b/src/qdoc/qdoc/src/qdoc/docbookgenerator.cpp
@@ -342,7 +342,7 @@ qsizetype DocBookGenerator::generateAtom(const Atom *atom, const Node *relative,
m_writer->writeStartElement(dbNamespace, "guilabel");
if (m_useITS)
m_writer->writeAttribute(itsNamespace, "translate", "no");
- } else {
+ } else if (atom->string() != ATOM_FORMATTING_TRADEMARK) {
relative->location().warning(QStringLiteral("Unsupported formatting: %1").arg(atom->string()));
}
break;
@@ -359,6 +359,9 @@ qsizetype DocBookGenerator::generateAtom(const Atom *atom, const Node *relative,
if (atom->string() == ATOM_FORMATTING_TELETYPE)
m_inTeletype = false;
endLink();
+ } else if (atom->string() == ATOM_FORMATTING_TRADEMARK) {
+ if (appendTrademark(atom))
+ m_writer->writeCharacters(QChar(0x2122)); // 'TM' symbol
} else {
relative->location().warning(QStringLiteral("Unsupported formatting: %1").arg(atom->string()));
}
@@ -1565,22 +1568,18 @@ void DocBookGenerator::generateCompactList(const Node *relative, const NodeMulti
// Cut the name into pieces to determine whether it is simple (one piece) or complex
// (more than one piece).
- QStringList pieces;
- if (it.value()->isQmlType()) {
- QString name = it.value()->name();
- next = it;
- ++next;
- if (name != previousName)
- multipleOccurrences = false;
- if ((next != paragraph[curParNr].end()) && (name == next.value()->name())) {
- multipleOccurrences = true;
- previousName = name;
- }
- if (multipleOccurrences)
- name += ": " + it.value()->tree()->camelCaseModuleName();
- pieces << name;
- } else
- pieces = it.value()->fullName(relative).split("::");
+ QStringList pieces{it.value()->fullName(relative).split("::"_L1)};
+ const auto &name{pieces.last()};
+ next = it;
+ ++next;
+ if (name != previousName)
+ multipleOccurrences = false;
+ if ((next != paragraph[curParNr].end()) && (name == next.value()->name())) {
+ multipleOccurrences = true;
+ previousName = name;
+ }
+ if (multipleOccurrences && pieces.size() == 1)
+ pieces.last().append(": "_L1.arg(it.value()->tree()->camelCaseModuleName()));
// Write the link to the element, which is identical if the element is obsolete or not.
m_writer->writeStartElement(dbNamespace, "link");
@@ -2193,13 +2192,21 @@ void DocBookGenerator::generateRequisites(const Aggregate *aggregate)
}
if (aggregate->nodeType() == Node::Class) {
- // Instantiated by.
+ // Native type information.
auto *classe = const_cast<ClassNode *>(static_cast<const ClassNode *>(aggregate));
- if (classe->qmlElement() != nullptr && classe->status() != Node::Internal) {
- generateStartRequisite("Inherited By");
- generateSortedNames(classe, classe->derivedClasses());
+ if (classe && classe->isQmlNativeType() && classe->status() != Node::Internal) {
+ generateStartRequisite("In QML");
+
+ qsizetype idx{0};
+ QList<QmlTypeNode *> nativeTypes { classe->qmlNativeTypes().cbegin(), classe->qmlNativeTypes().cend()};
+ std::sort(nativeTypes.begin(), nativeTypes.end(), Node::nodeNameLessThan);
+
+ for (const auto &item : std::as_const(nativeTypes)) {
+ generateFullName(item, classe);
+ m_writer->writeCharacters(
+ Utilities::comma(idx++, nativeTypes.size()));
+ }
generateEndRequisite();
- generateRequisite("Instantiated By", fullDocumentLocation(classe->qmlElement()));
}
// Inherits.
@@ -2335,12 +2342,10 @@ void DocBookGenerator::generateQmlRequisites(const QmlTypeNode *qcn)
generateEndRequisite();
}
- // Instantiates.
+ // Native type information.
ClassNode *cn = (const_cast<QmlTypeNode *>(qcn))->classNode();
- if (cn && (cn->status() != Node::Internal)) {
- Atom a = Atom(Atom::LinkNode, CodeMarker::stringForNode(qcn));
-
- generateStartRequisite("Instantiates:");
+ if (cn && cn->isQmlNativeType() && cn->status() != Node::Internal) {
+ generateStartRequisite("In C++:");
generateSimpleLink(fullDocumentLocation(cn), cn->name());
generateEndRequisite();
}
@@ -3397,18 +3402,23 @@ void DocBookGenerator::generateDocBookSynopsis(const Node *node)
}
if (aggregate->nodeType() == Node::Class) {
- // Instantiated by.
+ // Native type
auto *classe = const_cast<ClassNode *>(static_cast<const ClassNode *>(aggregate));
- if (classe->qmlElement() != nullptr && classe->status() != Node::Internal) {
- const Node *otherNode = nullptr;
- Atom a = Atom(Atom::LinkNode, CodeMarker::stringForNode(classe->qmlElement()));
- QString link = getAutoLink(&a, aggregate, &otherNode);
-
+ if (classe && classe->isQmlNativeType() && classe->status() != Node::Internal) {
m_writer->writeStartElement(dbNamespace, "synopsisinfo");
- m_writer->writeAttribute("role", "instantiatedBy");
- generateSimpleLink(link, classe->qmlElement()->name());
+ m_writer->writeAttribute("role", "nativeTypeFor");
+
+ QList<QmlTypeNode *> nativeTypes { classe->qmlNativeTypes().cbegin(), classe->qmlNativeTypes().cend()};
+ std::sort(nativeTypes.begin(), nativeTypes.end(), Node::nodeNameLessThan);
+
+ for (auto item : std::as_const(nativeTypes)) {
+ const Node *otherNode{nullptr};
+ Atom a = Atom(Atom::LinkNode, CodeMarker::stringForNode(item));
+ const QString &link = getAutoLink(&a, aggregate, &otherNode);
+ generateSimpleLink(link, item->name());
+ }
+
m_writer->writeEndElement(); // synopsisinfo
- newLine();
}
// Inherits.
@@ -3497,15 +3507,16 @@ void DocBookGenerator::generateDocBookSynopsis(const Node *node)
newLine();
}
- // Instantiates.
+ // Native type
ClassNode *cn = (const_cast<QmlTypeNode *>(qcn))->classNode();
- if (cn && (cn->status() != Node::Internal)) {
+
+ if (cn && cn->isQmlNativeType() && (cn->status() != Node::Internal)) {
const Node *otherNode = nullptr;
Atom a = Atom(Atom::LinkNode, CodeMarker::stringForNode(qcn));
QString link = getAutoLink(&a, cn, &otherNode);
m_writer->writeTextElement(dbNamespace, "synopsisinfo");
- m_writer->writeAttribute("role", "instantiates");
+ m_writer->writeAttribute("role", "nativeType");
generateSimpleLink(link, cn->name());
m_writer->writeEndElement(); // synopsisinfo
newLine();
diff --git a/src/qdoc/qdoc/src/qdoc/docparser.cpp b/src/qdoc/qdoc/src/qdoc/docparser.cpp
index b6304a960..e60c83f31 100644
--- a/src/qdoc/qdoc/src/qdoc/docparser.cpp
+++ b/src/qdoc/qdoc/src/qdoc/docparser.cpp
@@ -110,6 +110,7 @@ enum {
CMD_TABLE,
CMD_TABLEOFCONTENTS,
CMD_TARGET,
+ CMD_TM,
CMD_TT,
CMD_UICONTROL,
CMD_UNDERLINE,
@@ -214,6 +215,7 @@ static struct
{ "table", CMD_TABLE },
{ "tableofcontents", CMD_TABLEOFCONTENTS },
{ "target", CMD_TARGET },
+ { "tm", CMD_TM },
{ "tt", CMD_TT },
{ "uicontrol", CMD_UICONTROL },
{ "underline", CMD_UNDERLINE },
@@ -967,6 +969,11 @@ void DocParser::parse(const QString &source, DocPrivate *docPrivate,
}
insertTarget(getRestOfLine());
break;
+ case CMD_TM:
+ // Ignore command while parsing \section<N> argument
+ if (m_paragraphState != InSingleLineParagraph)
+ startFormat(ATOM_FORMATTING_TRADEMARK, cmd);
+ break;
case CMD_TT:
startFormat(ATOM_FORMATTING_TELETYPE, cmd);
break;
@@ -1161,6 +1168,7 @@ void DocParser::parse(const QString &source, DocPrivate *docPrivate,
enterPara();
appendChar('}');
} else {
+ const auto &last{m_private->m_text.lastAtom()->string()};
appendAtom(Atom(Atom::FormattingRight, *format));
if (*format == ATOM_FORMATTING_INDEX) {
if (m_indexStartedParagraph)
@@ -1175,6 +1183,8 @@ void DocParser::parse(const QString &source, DocPrivate *docPrivate,
currentLinkAtom->concatenateString(suffix);
}
currentLinkAtom = nullptr;
+ } else if (*format == ATOM_FORMATTING_TRADEMARK) {
+ m_private->m_text.lastAtom()->append(last);
}
m_pendingFormats.erase(format);
}
@@ -1456,11 +1466,14 @@ void DocParser::startFormat(const QString &format, int cmd)
++m_braceDepth;
++m_position;
} else {
- appendAtom(Atom(Atom::String, getArgument()));
+ const auto &arg{getArgument()};
+ appendAtom(Atom(Atom::String, arg));
appendAtom(Atom(Atom::FormattingRight, format));
if (format == ATOM_FORMATTING_INDEX && m_indexStartedParagraph) {
skipAllSpaces();
m_indexStartedParagraph = false;
+ } else if (format == ATOM_FORMATTING_TRADEMARK) {
+ m_private->m_text.lastAtom()->append(arg);
}
}
}
diff --git a/src/qdoc/qdoc/src/qdoc/generator.cpp b/src/qdoc/qdoc/src/qdoc/generator.cpp
index 9ba4de976..846771f48 100644
--- a/src/qdoc/qdoc/src/qdoc/generator.cpp
+++ b/src/qdoc/qdoc/src/qdoc/generator.cpp
@@ -50,6 +50,7 @@ QList<Generator *> Generator::s_generators;
QString Generator::s_outDir;
QString Generator::s_outSubdir;
QStringList Generator::s_outFileNames;
+QSet<QString> Generator::s_trademarks;
QSet<QString> Generator::s_outputFormats;
QHash<QString, QString> Generator::s_outputPrefixes;
QHash<QString, QString> Generator::s_outputSuffixes;
@@ -213,6 +214,7 @@ QFile *Generator::openSubPageFile(const Node *node, const QString &fileName)
qCDebug(lcQdoc, "Writing: %s", qPrintable(path));
s_outFileNames << fileName;
+ s_trademarks.clear();
return outFile;
}
@@ -248,28 +250,22 @@ QString Generator::fileBase(const Node *node) const
if (node->hasFileNameBase())
return node->fileNameBase();
- QString base;
- if (node->isCollectionNode()) {
- base = node->name() + outputSuffix(node);
- if (base.endsWith(".html"))
- base.truncate(base.size() - 5);
+ QString base{node->name()};
+ if (base.endsWith(".html"))
+ base.truncate(base.size() - 5);
+ if (node->isCollectionNode()) {
if (node->isQmlModule())
base.append("-qmlmodule");
else if (node->isModule())
base.append("-module");
- // Why not add "-group" for group pages?
+ base.append(outputSuffix(node));
} else if (node->isTextPageNode()) {
- base = node->name();
- if (base.endsWith(".html"))
- base.truncate(base.size() - 5);
-
if (node->isExample()) {
- base.prepend(s_project.toLower() + QLatin1Char('-'));
- base.append(QLatin1String("-example"));
+ base.prepend("%1-"_L1.arg(s_project.toLower()));
+ base.append("-example");
}
} else if (node->isQmlType()) {
- base = node->name();
/*
To avoid file name conflicts in the html directory,
we prepend a prefix (by default, "qml-") and an optional suffix
@@ -281,19 +277,19 @@ QString Generator::fileBase(const Node *node) const
*/
if (!node->logicalModuleName().isEmpty() && !node->isQmlBasicType()
&& (!node->logicalModule()->isInternal() || m_showInternal))
- base.prepend(node->logicalModuleName() + outputSuffix(node) + QLatin1Char('-'));
+ base.prepend("%1%2-"_L1.arg(node->logicalModuleName(), outputSuffix(node)));
- base.prepend(outputPrefix(node));
} else if (node->isProxyNode()) {
- base.append("%1-%2-proxy"_L1.arg(node->name(), node->tree()->physicalModuleName()));
+ base.append("-%1-proxy"_L1.arg(node->tree()->physicalModuleName()));
} else {
+ base.clear();
const Node *p = node;
forever {
const Node *pp = p->parent();
base.prepend(p->name());
if (pp == nullptr || pp->name().isEmpty() || pp->isTextPageNode())
break;
- base.prepend(QLatin1Char('-'));
+ base.prepend('-'_L1);
p = pp;
}
if (node->isNamespace() && !node->name().isEmpty()) {
@@ -303,8 +299,10 @@ QString Generator::fileBase(const Node *node) const
base.append(ns->tree()->camelCaseModuleName());
}
}
+ base.append(outputSuffix(node));
}
+ base.prepend(outputPrefix(node));
QString canonicalName{ Utilities::asAsciiPrintable(base) };
Node *n = const_cast<Node *>(node);
n->setFileNameBase(canonicalName);
@@ -1393,6 +1391,36 @@ bool Generator::hasExceptions(const Node *node, NodeList &reentrant, NodeList &t
return result;
}
+/*!
+ Returns \c true if a trademark symbol should be appended to the
+ output as determined by \a atom. Trademarks are tracked via the
+ use of the \\tm formatting command.
+
+ Returns true if:
+
+ \list
+ \li \a atom is of type Atom::FormattingRight containing
+ ATOM_FORMATTING_TRADEMARK, and
+ \li The trademarked string is the first appearance on the
+ current sub-page.
+ \endlist
+*/
+bool Generator::appendTrademark(const Atom *atom)
+{
+ if (atom->type() != Atom::FormattingRight)
+ return false;
+ if (atom->string() != ATOM_FORMATTING_TRADEMARK)
+ return false;
+
+ if (atom->count() > 1) {
+ if (s_trademarks.contains(atom->string(1)))
+ return false;
+ s_trademarks << atom->string(1);
+ }
+
+ return true;
+}
+
static void startNote(Text &text)
{
text << Atom::ParaLeft << Atom(Atom::FormattingLeft, ATOM_FORMATTING_BOLD)
@@ -1699,9 +1727,9 @@ void Generator::initialize()
for (const auto &prefix : items)
s_outputPrefixes[prefix] =
config.get(CONFIG_OUTPUTPREFIXES + Config::dot + prefix).asString();
- } else {
- s_outputPrefixes[QLatin1String("QML")] = QLatin1String("qml-");
}
+ if (!items.contains(u"QML"_s))
+ s_outputPrefixes[u"QML"_s] = u"qml-"_s;
s_outputSuffixes.clear();
for (const auto &suffix : config.get(CONFIG_OUTPUTSUFFIXES).asStringList())
@@ -1846,19 +1874,32 @@ QString Generator::outFileName()
QString Generator::outputPrefix(const Node *node)
{
- // Prefix is applied to QML types
- if (node->isQmlType())
- return s_outputPrefixes[QLatin1String("QML")];
-
+ // Omit prefix for module pages
+ if (node->isPageNode() && !node->isCollectionNode()) {
+ switch (node->genus()) {
+ case Node::QML:
+ return s_outputPrefixes[u"QML"_s];
+ case Node::CPP:
+ return s_outputPrefixes[u"CPP"_s];
+ default:
+ break;
+ }
+ }
return QString();
}
QString Generator::outputSuffix(const Node *node)
{
- // Suffix is applied to QML types, as
- // well as module pages.
- if (node->isQmlModule() || node->isQmlType())
- return s_outputSuffixes[QLatin1String("QML")];
+ if (node->isPageNode()) {
+ switch (node->genus()) {
+ case Node::QML:
+ return s_outputSuffixes[u"QML"_s];
+ case Node::CPP:
+ return s_outputSuffixes[u"CPP"_s];
+ default:
+ break;
+ }
+ }
return QString();
}
diff --git a/src/qdoc/qdoc/src/qdoc/generator.h b/src/qdoc/qdoc/src/qdoc/generator.h
index 8f2b34039..faddc8eb7 100644
--- a/src/qdoc/qdoc/src/qdoc/generator.h
+++ b/src/qdoc/qdoc/src/qdoc/generator.h
@@ -160,6 +160,7 @@ protected:
// std::sort already defaults to operator< when no predicate is
// provided.
static bool comparePaths(const QString &a, const QString &b) { return (a < b); }
+ static bool appendTrademark(const Atom *atom);
private:
static Generator *s_currentGenerator;
@@ -171,6 +172,7 @@ private:
static QString s_outSubdir;
static QStringList s_outFileNames;
static QSet<QString> s_outputFormats;
+ static QSet<QString> s_trademarks;
static QHash<QString, QString> s_outputPrefixes;
static QHash<QString, QString> s_outputSuffixes;
static bool s_noLinkErrors;
diff --git a/src/qdoc/qdoc/src/qdoc/htmlgenerator.cpp b/src/qdoc/qdoc/src/qdoc/htmlgenerator.cpp
index b27d169d3..3a4fd4ecf 100644
--- a/src/qdoc/qdoc/src/qdoc/htmlgenerator.cpp
+++ b/src/qdoc/qdoc/src/qdoc/htmlgenerator.cpp
@@ -115,6 +115,7 @@ void HtmlGenerator::initializeGenerator()
{ ATOM_FORMATTING_SUPERSCRIPT, "<sup>", "</sup>" },
{ ATOM_FORMATTING_TELETYPE, "<code translate=\"no\">",
"</code>" }, // <tt> tag is not supported in HTML5
+ { ATOM_FORMATTING_TRADEMARK, "", "&#8482;" },
{ ATOM_FORMATTING_UICONTROL, "<b translate=\"no\">", "</b>" },
{ ATOM_FORMATTING_UNDERLINE, "<u>", "</u>" },
{ nullptr, nullptr, nullptr } };
@@ -201,6 +202,9 @@ void HtmlGenerator::initializeGenerator()
+ Config::dot + CONFIG_QMLTYPESTITLE)
.asString(QLatin1String("QML Types"));
+ m_trademarkspage = config->get(CONFIG_NAVIGATION
+ + Config::dot + CONFIG_TRADEMARKSPAGE).asString();
+
m_buildversion = config->get(CONFIG_BUILDVERSION).asString();
}
@@ -416,6 +420,17 @@ qsizetype HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, Co
case Atom::FormattingRight:
if (atom->string() == ATOM_FORMATTING_LINK) {
endLink();
+ } else if (atom->string() == ATOM_FORMATTING_TRADEMARK) {
+ if (appendTrademark(atom)) {
+ // Make the trademark symbol a link to navigation.trademarkspage (if set)
+ const Node *node{nullptr};
+ const Atom tm_link(Atom::NavLink, m_trademarkspage);
+ if (const auto &link = getLink(&tm_link, relative, &node);
+ !link.isEmpty() && node != relative)
+ out() << "<a href=\"%1\">%2</a>"_L1.arg(link, formattingRightMap()[atom->string()]);
+ else
+ out() << formattingRightMap()[atom->string()];
+ }
} else if (atom->string().startsWith("span ")) {
out() << "</span>";
} else {
@@ -699,8 +714,7 @@ qsizetype HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, Co
location.warning(
QStringLiteral("Can't link to '%1'").arg(atom->string()));
}
- beginLink(link, nullptr, relative);
- m_linkNode = node;
+ beginLink(link, node, relative);
skipAhead = 1;
} break;
case Atom::ExampleFileLink: {
@@ -1916,14 +1930,14 @@ void HtmlGenerator::generateRequisites(Aggregate *aggregate, CodeMarker *marker)
const QString sinceText = "Since";
const QString inheritedBytext = "Inherited By";
const QString inheritsText = "Inherits";
- const QString instantiatedByText = "Instantiated By";
+ const QString nativeTypeText = "In QML";
const QString qtVariableText = "qmake";
const QString cmakeText = "CMake";
const QString statusText = "Status";
// The order of the requisites matter
const QStringList requisiteorder { headerText, cmakeText, qtVariableText, sinceText,
- instantiatedByText, inheritsText, inheritedBytext, statusText };
+ nativeTypeText, inheritsText, inheritedBytext, statusText };
addIncludeFileToMap(aggregate, marker, requisites, text, headerText);
addSinceToMap(aggregate, requisites, &text, sinceText);
@@ -1935,8 +1949,8 @@ void HtmlGenerator::generateRequisites(Aggregate *aggregate, CodeMarker *marker)
if (aggregate->isClassNode()) {
auto *classe = dynamic_cast<ClassNode *>(aggregate);
- if (classe->qmlElement() != nullptr && !classe->isInternal())
- addInstantiatedByToMap(requisites, &text, instantiatedByText, classe);
+ if (classe->isQmlNativeType() && !classe->isInternal())
+ addQmlNativeTypesToMap(requisites, &text, nativeTypeText, classe);
addInheritsToMap(requisites, &text, inheritsText, classe);
addInheritedByToMap(requisites, &text, inheritedBytext, classe);
@@ -2026,21 +2040,29 @@ void HtmlGenerator::addInheritsToMap(QMap<QString, Text> &requisites, Text *text
}
/*!
- * \internal
- * Add the instantiated by information to the map.
+ \internal
+ Add the QML/C++ native type information to the map.
*/
-void HtmlGenerator::addInstantiatedByToMap(QMap<QString, Text> &requisites, Text *text,
- const QString &instantiatedByText,
- ClassNode *classe) const
+ void HtmlGenerator::addQmlNativeTypesToMap(QMap<QString, Text> &requisites, Text *text,
+ const QString &nativeTypeText, ClassNode *classe) const
{
- if (text != nullptr) {
- text->clear();
- *text << Atom(Atom::LinkNode, CodeMarker::stringForNode(classe->qmlElement()))
+ if (!text)
+ return;
+
+ text->clear();
+
+ QList<QmlTypeNode *> nativeTypes { classe->qmlNativeTypes().cbegin(), classe->qmlNativeTypes().cend()};
+ std::sort(nativeTypes.begin(), nativeTypes.end(), Node::nodeNameLessThan);
+ qsizetype index { 0 };
+
+ for (const auto &item : std::as_const(nativeTypes)) {
+ *text << Atom(Atom::LinkNode, CodeMarker::stringForNode(item))
<< Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
- << Atom(Atom::String, classe->qmlElement()->name())
+ << Atom(Atom::String, item->name())
<< Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
- requisites.insert(instantiatedByText, *text);
+ *text << Utilities::comma(index++, nativeTypes.size());
}
+ requisites.insert(nativeTypeText, *text);
}
/*!
@@ -2169,7 +2191,7 @@ void HtmlGenerator::generateQmlRequisites(QmlTypeNode *qcn, CodeMarker *marker)
const QString sinceText = "Since:";
const QString inheritedBytext = "Inherited By:";
const QString inheritsText = "Inherits:";
- const QString instantiatesText = "Instantiates:";
+ const QString nativeTypeText = "In C++:";
const QString statusText = "Status:";
// add the module name and version to the map
@@ -2194,15 +2216,15 @@ void HtmlGenerator::generateQmlRequisites(QmlTypeNode *qcn, CodeMarker *marker)
requisites.insert(sinceText, text);
}
- // add the instantiates to the map
+ // add the native type to the map
ClassNode *cn = qcn->classNode();
- if (cn && !cn->isInternal()) {
+ if (cn && cn->isQmlNativeType() && !cn->isInternal()) {
text.clear();
text << Atom(Atom::LinkNode, CodeMarker::stringForNode(cn));
text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK);
text << Atom(Atom::String, cn->name());
text << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK);
- requisites.insert(instantiatesText, text);
+ requisites.insert(nativeTypeText, text);
}
// add the inherits to the map
@@ -2234,7 +2256,7 @@ void HtmlGenerator::generateQmlRequisites(QmlTypeNode *qcn, CodeMarker *marker)
addStatusToMap(qcn, requisites, text, statusText);
// The order of the requisites matter
- const QStringList requisiteorder { importText, sinceText, instantiatesText, inheritsText,
+ const QStringList requisiteorder { importText, sinceText, nativeTypeText, inheritsText,
inheritedBytext, statusText };
if (!requisites.isEmpty()) {
@@ -2828,22 +2850,19 @@ void HtmlGenerator::generateCompactList(ListType listType, const Node *relative,
out() << "<a href=\"" << link << "\">";
}
- QStringList pieces;
- if (it.value()->isQmlType()) {
- QString name = it.value()->name();
- next = it;
- ++next;
- if (name != previousName)
- multipleOccurrences = false;
- if ((next != paragraph[curParNr].end()) && (name == next.value()->name())) {
- multipleOccurrences = true;
- previousName = name;
- }
- if (multipleOccurrences)
- name += ": " + it.value()->tree()->camelCaseModuleName();
- pieces << name;
- } else
- pieces = it.value()->fullName(relative).split("::");
+ QStringList pieces{it.value()->fullName(relative).split("::"_L1)};
+ const auto &name{pieces.last()};
+ next = it;
+ ++next;
+ if (name != previousName)
+ multipleOccurrences = false;
+ if ((next != paragraph[curParNr].end()) && (name == next.value()->name())) {
+ multipleOccurrences = true;
+ previousName = name;
+ }
+ if (multipleOccurrences && pieces.size() == 1)
+ pieces.last().append(": %1"_L1.arg(it.value()->tree()->camelCaseModuleName()));
+
out() << protectEnc(pieces.last());
out() << "</a>";
if (pieces.size() > 1) {
@@ -3520,12 +3539,15 @@ void HtmlGenerator::beginLink(const QString &link, const Node *node, const Node
if (m_link.isEmpty())
return;
+ const QString &translate_attr =
+ (node && node->genus() & Node::API) ? " translate=\"no\""_L1 : ""_L1;
+
if (node == nullptr || (relative != nullptr && node->status() == relative->status()))
- out() << "<a href=\"" << m_link << "\" translate=\"no\">";
+ out() << "<a href=\"" << m_link << "\"%1>"_L1.arg(translate_attr);
else if (node->isDeprecated())
- out() << "<a href=\"" << m_link << "\" class=\"obsolete\" translate=\"no\">";
+ out() << "<a href=\"" << m_link << "\" class=\"obsolete\"%1>"_L1.arg(translate_attr);
else
- out() << "<a href=\"" << m_link << "\" translate=\"no\">";
+ out() << "<a href=\"" << m_link << "\"%1>"_L1.arg(translate_attr);
}
void HtmlGenerator::endLink()
diff --git a/src/qdoc/qdoc/src/qdoc/htmlgenerator.h b/src/qdoc/qdoc/src/qdoc/htmlgenerator.h
index 6207fb7be..62fe7df38 100644
--- a/src/qdoc/qdoc/src/qdoc/htmlgenerator.h
+++ b/src/qdoc/qdoc/src/qdoc/htmlgenerator.h
@@ -112,8 +112,9 @@ private:
const QString &CMakeInfo) const;
void addQtVariableToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites, Text *text,
const QString &qtVariableText) const;
- void addInstantiatedByToMap(QMap<QString, Text> &requisites, Text *text,
- const QString &instantiatedByText, ClassNode *classe) const;
+ void addQmlNativeTypesToMap(QMap<QString, Text> &requisites, Text *text,
+ const QString &nativeTypeText,
+ ClassNode *classe) const;
void addInheritsToMap(QMap<QString, Text> &requisites, Text *text, const QString &inheritsText,
ClassNode *classe);
void addInheritedByToMap(QMap<QString, Text> &requisites, Text *text,
@@ -155,6 +156,7 @@ private:
QString m_cppclassestitle {};
QString m_qmltypespage {};
QString m_qmltypestitle {};
+ QString m_trademarkspage {};
QString m_buildversion {};
QString m_qflagsHref {};
int tocDepth {};
diff --git a/src/qdoc/qdoc/src/qdoc/qdocindexfiles.cpp b/src/qdoc/qdoc/src/qdoc/qdocindexfiles.cpp
index db6852c23..74d27ed3c 100644
--- a/src/qdoc/qdoc/src/qdoc/qdocindexfiles.cpp
+++ b/src/qdoc/qdoc/src/qdoc/qdocindexfiles.cpp
@@ -753,6 +753,38 @@ bool QDocIndexFiles::adoptRelatedNode(Aggregate *adoptiveParent, int index)
}
/*!
+ Write canonicalized versions of \\target and \\keyword identifiers
+ that appear in the documentation of \a node into the index using
+ \a writer, so that they can be used as link targets in external
+ documentation sets.
+*/
+void QDocIndexFiles::writeTargets(QXmlStreamWriter &writer, Node *node)
+{
+ if (node->doc().hasTargets()) {
+ for (const Atom *target : std::as_const(node->doc().targets())) {
+ const QString &title = target->string();
+ const QString &name{Utilities::asAsciiPrintable(title)};
+ writer.writeStartElement("target");
+ writer.writeAttribute("name", node->isExternalPage() ? title : name);
+ if (name != title)
+ writer.writeAttribute("title", title);
+ writer.writeEndElement(); // target
+ }
+ }
+ if (node->doc().hasKeywords()) {
+ for (const Atom *keyword : std::as_const(node->doc().keywords())) {
+ const QString &title = keyword->string();
+ const QString &name{Utilities::asAsciiPrintable(title)};
+ writer.writeStartElement("keyword");
+ writer.writeAttribute("name", name);
+ if (name != title)
+ writer.writeAttribute("title", title);
+ writer.writeEndElement(); // keyword
+ }
+ }
+}
+
+/*!
Generate the index section with the given \a writer for the \a node
specified, returning true if an element was written, and returning
false if an element is not written.
@@ -1073,48 +1105,7 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter &writer, Node *node,
break;
}
- /*
- For our pages, we canonicalize the target, keyword and content
- item names so that they can be used by qdoc for other sets of
- documentation.
-
- The reason we do this here is that we don't want to ruin
- externally composed indexes, containing non-qdoc-style target names
- when reading in indexes.
-
- targets and keywords are now allowed in any node, not just inner nodes.
- */
-
- if (node->doc().hasTargets()) {
- bool external = false;
- if (node->isExternalPage())
- external = true;
- const auto &targets = node->doc().targets();
- for (const Atom *target : targets) {
- const QString &title = target->string();
- QString name = Utilities::asAsciiPrintable(title);
- writer.writeStartElement("target");
- if (!external)
- writer.writeAttribute("name", name);
- else
- writer.writeAttribute("name", title);
- if (name != title)
- writer.writeAttribute("title", title);
- writer.writeEndElement(); // target
- }
- }
- if (node->doc().hasKeywords()) {
- const auto &keywords = node->doc().keywords();
- for (const Atom *keyword : keywords) {
- const QString &title = keyword->string();
- QString name = Utilities::asAsciiPrintable(title);
- writer.writeStartElement("keyword");
- writer.writeAttribute("name", name);
- if (name != title)
- writer.writeAttribute("title", title);
- writer.writeEndElement(); // keyword
- }
- }
+ writeTargets(writer, node);
/*
Some nodes have a table of contents. For these, we close
@@ -1294,6 +1285,8 @@ void QDocIndexFiles::generateFunctionSection(QXmlStreamWriter &writer, FunctionN
writer.writeEndElement(); // parameter
}
+ writeTargets(writer, fn);
+
// Append to the section if the callback object was set
if (post_)
post_->append(writer, fn);
diff --git a/src/qdoc/qdoc/src/qdoc/qdocindexfiles.h b/src/qdoc/qdoc/src/qdoc/qdocindexfiles.h
index 6148c6cd2..2225aa576 100644
--- a/src/qdoc/qdoc/src/qdoc/qdocindexfiles.h
+++ b/src/qdoc/qdoc/src/qdoc/qdocindexfiles.h
@@ -46,6 +46,7 @@ private:
void resolveIndex();
int indexForNode(Node *node);
bool adoptRelatedNode(Aggregate *adoptiveParent, int index);
+ void writeTargets(QXmlStreamWriter &writer, Node *node);
void generateIndex(const QString &fileName, const QString &url, const QString &title,
Generator *g);
diff --git a/src/qdoc/qdoc/src/qdoc/tree.cpp b/src/qdoc/qdoc/src/qdoc/tree.cpp
index b340098b7..686307a0f 100644
--- a/src/qdoc/qdoc/src/qdoc/tree.cpp
+++ b/src/qdoc/qdoc/src/qdoc/tree.cpp
@@ -283,7 +283,7 @@ void Tree::resolveCppToQmlLinks()
auto *qcn = static_cast<QmlTypeNode *>(child);
auto *cn = const_cast<ClassNode *>(qcn->classNode());
if (cn)
- cn->setQmlElement(qcn);
+ cn->insertQmlNativeType(qcn);
}
}
}
diff --git a/src/qdoc/qdoc/src/qdoc/webxmlgenerator.cpp b/src/qdoc/qdoc/src/qdoc/webxmlgenerator.cpp
index 17822a22b..c2cc38161 100644
--- a/src/qdoc/qdoc/src/qdoc/webxmlgenerator.cpp
+++ b/src/qdoc/qdoc/src/qdoc/webxmlgenerator.cpp
@@ -456,6 +456,8 @@ const Atom *WebXMLGenerator::addAtomElements(QXmlStreamWriter &writer, const Ato
writer.writeEndElement();
else if (atom->string() == ATOM_FORMATTING_INDEX)
writer.writeEndElement();
+ else if (atom->string() == ATOM_FORMATTING_TRADEMARK && appendTrademark(atom))
+ writer.writeCharacters(QChar(0x2122)); // 'TM' symbol
}
if (m_inLink) {
writer.writeEndElement(); // link
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/autolinking.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/autolinking.html
index 444c3d0d1..ac04c33cd 100644
--- a/src/qdoc/qdoc/tests/generatedoutput/expected_output/autolinking.html
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/autolinking.html
@@ -19,7 +19,7 @@
<!-- $$$autolinking.html-description -->
<div class="descr" id="details">
<h2 id="testqdoc">TestQDoc</h2>
-<p>The string <a href="testqdoc.html" translate="no">TestQDoc</a> links to the C++ namespace unless linking explicitly, <a href="autolinking.html#testqdoc" translate="no">like this</a>, or <a href="testqdoc.html" translate="no">this</a>. Also,</p>
+<p>The string <a href="testqdoc.html" translate="no">TestQDoc</a> links to the C++ namespace unless linking explicitly, <a href="autolinking.html#testqdoc">like this</a>, or <a href="testqdoc.html" translate="no">this</a>. Also,</p>
<p>Autolinks:</p>
<ul>
<li><a href="testqdoc-testderived.html" translate="no">TestQDoc::TestDerived</a></li>
@@ -27,7 +27,7 @@
<p>Explicit links:</p>
<ul>
<li><a href="testqdoc-testderived.html" translate="no">TestQDoc::TestDerived</a></li>
-<li><a href="obsolete-classes.html#testqdoc" translate="no">Obsolete Classes#TestQDoc</a></li>
+<li><a href="obsolete-classes.html#testqdoc">Obsolete Classes#TestQDoc</a></li>
</ul>
<h2 id="someprop">someProp</h2>
</div>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist/testcpp-module.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist/testcpp-module.html
index f413175b0..6b58461da 100644
--- a/src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist/testcpp-module.html
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/noautolist/testcpp-module.html
@@ -36,7 +36,7 @@
<li><a href="testcpp-module.html#section" translate="no">section()</a></li>
<li><a href="testcpp-module.html#section" translate="no">section() is a section title</a></li>
<li><a href="testqdoc-test.html#Test" translate="no">open( parenthesis</a></li>
-<li><a href="https://en.cppreference.com/w/cpp/utility/move" translate="no">C++11 added std::move(T&amp;&amp; t)</a></li>
+<li><a href="https://en.cppreference.com/w/cpp/utility/move">C++11 added std::move(T&amp;&amp; t)</a></li>
</ul>
<h4 id="section">section()</h4>
</div>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp-module.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp-module.html
index 826926d59..83ab5b175 100644
--- a/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp-module.html
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp-module.html
@@ -48,7 +48,7 @@
<li><a href="testcpp-module.html#section" translate="no">section()</a></li>
<li><a href="testcpp-module.html#section" translate="no">section() is a section title</a></li>
<li><a href="testqdoc-test.html#Test" translate="no">open( parenthesis</a></li>
-<li><a href="https://en.cppreference.com/w/cpp/utility/move" translate="no">C++11 added std::move(T&amp;&amp; t)</a></li>
+<li><a href="https://en.cppreference.com/w/cpp/utility/move">C++11 added std::move(T&amp;&amp; t)</a></li>
</ul>
<h4 id="section">section()</h4>
</div>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/testcpp-module.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/testcpp-module.html
index 826926d59..83ab5b175 100644
--- a/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/testcpp-module.html
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/testcpp-module.html
@@ -48,7 +48,7 @@
<li><a href="testcpp-module.html#section" translate="no">section()</a></li>
<li><a href="testcpp-module.html#section" translate="no">section() is a section title</a></li>
<li><a href="testqdoc-test.html#Test" translate="no">open( parenthesis</a></li>
-<li><a href="https://en.cppreference.com/w/cpp/utility/move" translate="no">C++11 added std::move(T&amp;&amp; t)</a></li>
+<li><a href="https://en.cppreference.com/w/cpp/utility/move">C++11 added std::move(T&amp;&amp; t)</a></li>
</ul>
<h4 id="section">section()</h4>
</div>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/testqdoc-test.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/testqdoc-test.html
index 7a0e875f4..028339088 100644
--- a/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/testqdoc-test.html
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testcpp/testqdoc-test.html
@@ -41,7 +41,7 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr>
<li><a href="testqdoc-test-obsolete.html">Deprecated members</a></li>
<li>Test is part of <a href="cpptypes.html">Test C++ Types</a>.</li>
</ul>
-<p><b>Note:</b> All functions in this class are <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" translate="no">reentrant</a> with the following exceptions:</p>
+<p><b>Note:</b> All functions in this class are <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</a> with the following exceptions:</p>
<ul>
<li><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a>(int i, bool b) const</li>
</ul>
@@ -132,7 +132,7 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr>
<!-- $$$someFunctionDefaultArg[overload1]$$$someFunctionDefaultArgintbool -->
<h3 class="fn" translate="no" id="someFunctionDefaultArg"><span class="type">void</span> Test::<span class="name">someFunctionDefaultArg</span>(<span class="type">int</span> <i>i</i>, <span class="type">bool</span> <i>b</i> = false) const</h3>
<p>Function that takes a parameter <i translate="no">i</i> and <i translate="no">b</i>.</p>
-<p><b>Warning:</b> This function is not <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" translate="no">reentrant</a>.</p>
+<p><b>Warning:</b> This function is not <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</a>.</p>
<!-- @@@someFunctionDefaultArg -->
<!-- $$$virtualFun[overload1]$$$virtualFun -->
<h3 class="fn" translate="no" id="virtualFun"><code class="details extra" translate="no">[virtual]</code> <span class="type">void</span> Test::<span class="name">virtualFun</span>()</h3>
diff --git a/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-test.html b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-test.html
index 7a0e875f4..028339088 100644
--- a/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-test.html
+++ b/src/qdoc/qdoc/tests/generatedoutput/expected_output/testqdoc-test.html
@@ -41,7 +41,7 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr>
<li><a href="testqdoc-test-obsolete.html">Deprecated members</a></li>
<li>Test is part of <a href="cpptypes.html">Test C++ Types</a>.</li>
</ul>
-<p><b>Note:</b> All functions in this class are <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" translate="no">reentrant</a> with the following exceptions:</p>
+<p><b>Note:</b> All functions in this class are <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</a> with the following exceptions:</p>
<ul>
<li><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a>(int i, bool b) const</li>
</ul>
@@ -132,7 +132,7 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr>
<!-- $$$someFunctionDefaultArg[overload1]$$$someFunctionDefaultArgintbool -->
<h3 class="fn" translate="no" id="someFunctionDefaultArg"><span class="type">void</span> Test::<span class="name">someFunctionDefaultArg</span>(<span class="type">int</span> <i>i</i>, <span class="type">bool</span> <i>b</i> = false) const</h3>
<p>Function that takes a parameter <i translate="no">i</i> and <i translate="no">b</i>.</p>
-<p><b>Warning:</b> This function is not <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" translate="no">reentrant</a>.</p>
+<p><b>Warning:</b> This function is not <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</a>.</p>
<!-- @@@someFunctionDefaultArg -->
<!-- $$$virtualFun[overload1]$$$virtualFun -->
<h3 class="fn" translate="no" id="virtualFun"><code class="details extra" translate="no">[virtual]</code> <span class="type">void</span> Test::<span class="name">virtualFun</span>()</h3>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-type.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-type.xml
index 176385ad8..826abfe3b 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-type.xml
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-qdoc-test-type.xml
@@ -23,7 +23,7 @@
</db:listitem>
</db:varlistentry>
<db:varlistentry>
-<db:term>Instantiates:</db:term>
+<db:term>In C++:</db:term>
<db:listitem>
<db:para><db:link xlink:href="testqdoc-test.xml">Test</db:link></db:para>
</db:listitem>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-themodule-thetype.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-themodule-thetype.xml
index 13d125c8d..b8a31eb9f 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-themodule-thetype.xml
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/qml-themodule-thetype.xml
@@ -15,7 +15,7 @@
</db:listitem>
</db:varlistentry>
<db:varlistentry>
-<db:term>Instantiates:</db:term>
+<db:term>In C++:</db:term>
<db:listitem>
<db:para><db:link xlink:href="testqdoc-testderived.xml">TestDerived</db:link></db:para>
</db:listitem>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/testqdoc-test.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/testqdoc-test.xml
index 06479d2a5..985ebfabe 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/testqdoc-test.xml
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/testqdoc-test.xml
@@ -46,15 +46,9 @@
</db:listitem>
</db:varlistentry>
<db:varlistentry>
-<db:term>Inherited By</db:term>
-<db:listitem>
-<db:para><db:link xlink:href="testqdoc-testderived.xml" xlink:role="class">TestQDoc::TestDerived</db:link></db:para>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term>Instantiated By</db:term>
+<db:term>In QML</db:term>
<db:listitem>
-<db:para>qml-qdoc-test-type.xml</db:para>
+<db:para><db:link xlink:href="qml-qdoc-test-type.xml" xlink:role="">Type</db:link></db:para>
</db:listitem>
</db:varlistentry>
<db:varlistentry>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/testqdoc-testderived.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/testqdoc-testderived.xml
index 6f0147dcc..c6272cc7d 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/testqdoc-testderived.xml
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/docbook/testqdoc-testderived.xml
@@ -37,15 +37,9 @@
</db:listitem>
</db:varlistentry>
<db:varlistentry>
-<db:term>Inherited By</db:term>
+<db:term>In QML</db:term>
<db:listitem>
-<db:para/>
-</db:listitem>
-</db:varlistentry>
-<db:varlistentry>
-<db:term>Instantiated By</db:term>
-<db:listitem>
-<db:para>qml-themodule-thetype.xml</db:para>
+<db:para><db:link xlink:href="qml-themodule-thetype.xml" xlink:role="">TheType</db:link></db:para>
</db:listitem>
</db:varlistentry>
<db:varlistentry>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/autolinking.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/autolinking.html
index e486a78e1..ead0896fe 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/autolinking.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/autolinking.html
@@ -19,7 +19,7 @@
<!-- $$$autolinking.html-description -->
<div class="descr" id="details">
<h2 id="testqdoc">TestQDoc</h2>
-<p>The string <a href="testqdoc.html" translate="no">TestQDoc</a> links to the C++ namespace unless linking explicitly, <a href="autolinking.html#testqdoc" translate="no">like this</a>, or <a href="testqdoc.html" translate="no">this</a>. Also,</p>
+<p>The string <a href="testqdoc.html" translate="no">TestQDoc</a> links to the C++ namespace unless linking explicitly, <a href="autolinking.html#testqdoc">like this</a>, or <a href="testqdoc.html" translate="no">this</a>. Also,</p>
<p>Autolinks:</p>
<ul>
<li><a href="testqdoc-testderived.html" translate="no">TestQDoc::TestDerived</a></li>
@@ -27,7 +27,7 @@
<p>Explicit links:</p>
<ul>
<li><a href="testqdoc-testderived.html" translate="no">TestQDoc::TestDerived</a></li>
-<li><a href="obsolete-classes.html#testqdoc" translate="no">Obsolete Classes#TestQDoc</a></li>
+<li><a href="obsolete-classes.html#testqdoc">Obsolete Classes#TestQDoc</a></li>
</ul>
<h2 id="someprop">someProp</h2>
</div>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-type.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-type.html
index 807a0e07a..7fb53266d 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-type.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-qdoc-test-type.html
@@ -27,7 +27,7 @@
<p>A QML type documented in a .cpp file. <a href="#details">More...</a></p>
<!-- @@@Type -->
<div class="table"><table class="alignedsummary" translate="no">
-<tr><td class="memItemLeft rightAlign topAlign"> Import Statement:</td><td class="memItemRight bottomAlign"> import QDoc.Test 1.1</td></tr><tr><td class="memItemLeft rightAlign topAlign"> Since:</td><td class="memItemRight bottomAlign"> Qt 1.1</td></tr><tr><td class="memItemLeft rightAlign topAlign"> Instantiates:</td><td class="memItemRight bottomAlign"> <a href="testqdoc-test.html" translate="no">Test</a></td></tr><tr><td class="memItemLeft rightAlign topAlign"> Status:</td><td class="memItemRight bottomAlign"> &lt;Work In Progress&gt;<span class="status work-in-progress"></span></td></tr></table></div><ul>
+<tr><td class="memItemLeft rightAlign topAlign"> Import Statement:</td><td class="memItemRight bottomAlign"> import QDoc.Test 1.1</td></tr><tr><td class="memItemLeft rightAlign topAlign"> Since:</td><td class="memItemRight bottomAlign"> Qt 1.1</td></tr><tr><td class="memItemLeft rightAlign topAlign"> In C++:</td><td class="memItemRight bottomAlign"> <a href="testqdoc-test.html" translate="no">Test</a></td></tr><tr><td class="memItemLeft rightAlign topAlign"> Status:</td><td class="memItemRight bottomAlign"> &lt;Work In Progress&gt;<span class="status work-in-progress"></span></td></tr></table></div><ul>
<li><a href="qml-qdoc-test-type-members.html">List of all members, including inherited members</a></li>
<li><a href="qml-qdoc-test-type-obsolete.html">Deprecated members</a></li>
</ul>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-themodule-thetype.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-themodule-thetype.html
index 369d9358e..86b8fd066 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-themodule-thetype.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-themodule-thetype.html
@@ -20,7 +20,7 @@
<div class="sidebar-content" id="sidebar-content"></div></div>
<h1 class="title" translate="no">TheType QML Type</h1>
<div class="table"><table class="alignedsummary" translate="no">
-<tr><td class="memItemLeft rightAlign topAlign"> Import Statement:</td><td class="memItemRight bottomAlign"> import TheModule</td></tr><tr><td class="memItemLeft rightAlign topAlign"> Instantiates:</td><td class="memItemRight bottomAlign"> <a href="testqdoc-testderived.html" translate="no">TestDerived</a></td></tr></table></div><ul>
+<tr><td class="memItemLeft rightAlign topAlign"> Import Statement:</td><td class="memItemRight bottomAlign"> import TheModule</td></tr><tr><td class="memItemLeft rightAlign topAlign"> In C++:</td><td class="memItemRight bottomAlign"> <a href="testqdoc-testderived.html" translate="no">TestDerived</a></td></tr></table></div><ul>
<li><a href="qml-themodule-thetype-members.html">List of all members, including inherited members</a></li>
</ul>
<h2 id="properties">Properties</h2>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-progressbar.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-progressbar.html
index 2db9f91d7..b491e2eec 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-progressbar.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-progressbar.html
@@ -39,7 +39,7 @@
<h2 id="details">Detailed Description</h2>
<p>A ProgressBar shows the linear progress of an event as its <a href="qml-uicomponents-progressbar.html#value-prop" translate="no">value</a>. The range is specified using the <a href="qml-uicomponents-progressbar.html#minimum-prop" translate="no">minimum</a> and the <a href="qml-uicomponents-progressbar.html#maximum-prop" translate="no">maximum</a> values.</p>
<p>The ProgressBar component is part of the <a href="uicomponents-qmlmodule.html" translate="no">UI Components</a> module.</p>
-<p>This documentation is part of the <a href="test-componentset-example.html" translate="no">UIComponents</a> example.</p>
+<p>This documentation is part of the <a href="test-componentset-example.html">UIComponents</a> example.</p>
<!-- @@@ProgressBar -->
<h2>Property Documentation</h2>
<!-- $$$color -->
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-switch.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-switch.html
index 600c6c164..8e3917a21 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-switch.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-switch.html
@@ -40,7 +40,7 @@
<h2 id="details">Detailed Description</h2>
<p>A toggle switch has two states: an <code translate="no">on</code> and an <code translate="no">off</code> state. The <code translate="no">off</code> state is when the <a href="qml-uicomponents-switch.html#on-prop" translate="no">on</a> property is set to <code translate="no">false</code>.</p>
<p>The ToggleSwitch component is part of the <a href="uicomponents-qmlmodule.html" translate="no">UI Components</a> module.</p>
-<p>This documentation is part of the <a href="test-componentset-example.html" translate="no">UIComponents</a> example.</p>
+<p>This documentation is part of the <a href="test-componentset-example.html">UIComponents</a> example.</p>
<!-- @@@Switch -->
<h2>Property Documentation</h2>
<!-- $$$on -->
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-tabwidget.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-tabwidget.html
index 3a55163ff..466262eca 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-tabwidget.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/qml-uicomponents-tabwidget.html
@@ -37,7 +37,7 @@
<h2 id="details">Detailed Description</h2>
<p>A TabWidget places its children as tabs in a view. Selecting a tab involves selecting the tab at the top.</p>
<p>The TabWidget component is part of the <a href="uicomponents-qmlmodule.html" translate="no">UI Components</a> module.</p>
-<p>This documentation is part of the <a href="test-componentset-example.html" translate="no">UIComponents</a> example.</p>
+<p>This documentation is part of the <a href="test-componentset-example.html">UIComponents</a> example.</p>
<h2 id="adding-tabs">Adding Tabs</h2>
<p>To add a tab, declare the tab as a child of the TabWidget.</p>
<pre class="cpp" translate="no"><span class="type"><a href="qml-uicomponents-tabwidget.html" translate="no">TabWidget</a></span> {
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testcpp-module.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testcpp-module.html
index 52cebe971..828bfd508 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testcpp-module.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testcpp-module.html
@@ -51,7 +51,7 @@
<li><a href="testcpp-module.html#section" translate="no">section()</a></li>
<li><a href="testcpp-module.html#section" translate="no">section() is a section title</a></li>
<li><a href="testqdoc-test.html#Test" translate="no">open( parenthesis</a></li>
-<li><a href="https://en.cppreference.com/w/cpp/utility/move" translate="no">C++11 added std::move(T&amp;&amp; t)</a></li>
+<li><a href="https://en.cppreference.com/w/cpp/utility/move">C++11 added std::move(T&amp;&amp; t)</a></li>
</ul>
<h4 id="section">section()</h4>
</div>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-test.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-test.html
index abfd03371..46f0b9ceb 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-test.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-test.html
@@ -33,7 +33,7 @@
target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> qmake:</td><td class="memItemRight bottomAlign"> QT += testcpp</td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> Since:</td><td class="memItemRight bottomAlign"> Qt 1.1</td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> Instantiated By:</td><td class="memItemRight bottomAlign"> <a href="qml-qdoc-test-type.html" translate="no">Type</a></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> In QML:</td><td class="memItemRight bottomAlign"> <a href="qml-qdoc-test-type.html" translate="no">Type</a></td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> Inherited By:</td><td class="memItemRight bottomAlign"> <p><a href="testqdoc-testderived.html" translate="no">TestQDoc::TestDerived</a></p>
</td></tr>
</table></div>
@@ -42,7 +42,7 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr>
<li><a href="testqdoc-test-obsolete.html">Deprecated members</a></li>
<li>Test is part of <a href="cpptypes.html">Test C++ Types</a>.</li>
</ul>
-<p><b>Note:</b> All functions in this class are <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" translate="no">reentrant</a> with the following exceptions:</p>
+<p><b>Note:</b> All functions in this class are <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</a> with the following exceptions:</p>
<ul>
<li><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a>(int i, bool b) const</li>
</ul>
@@ -134,7 +134,7 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr>
<!-- $$$someFunctionDefaultArg[overload1]$$$someFunctionDefaultArgintbool -->
<h3 class="fn" translate="no" id="someFunctionDefaultArg"><code class="details extra" translate="no">[since 2.0]</code> <span class="type">void</span> Test::<span class="name">someFunctionDefaultArg</span>(<span class="type">int</span> <i>i</i>, <span class="type">bool</span> <i>b</i> = false) const</h3>
<p>Function that takes a parameter <i translate="no">i</i> and <i translate="no">b</i>.</p>
-<p><b>Warning:</b> This function is not <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" translate="no">reentrant</a>.</p>
+<p><b>Warning:</b> This function is not <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</a>.</p>
<p>This function was introduced in Qt 2.0.</p>
<!-- @@@someFunctionDefaultArg -->
<!-- $$$virtualFun[overload1]$$$virtualFun -->
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-testderived.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-testderived.html
index 9fb47d89a..8c1c895e3 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-testderived.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/testqdoc-testderived.html
@@ -34,7 +34,7 @@
target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> qmake:</td><td class="memItemRight bottomAlign"> QT += testcpp</td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> Since:</td><td class="memItemRight bottomAlign"> Qt 2.0</td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> Instantiated By:</td><td class="memItemRight bottomAlign"> <a href="qml-themodule-thetype.html" translate="no">TheType</a></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> In QML:</td><td class="memItemRight bottomAlign"> <a href="qml-themodule-thetype.html" translate="no">TheType</a></td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> Inherits:</td><td class="memItemRight bottomAlign"> <a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></td></tr>
</table></div>
<ul>
@@ -105,7 +105,7 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr>
<h2>Property Documentation</h2>
<!-- $$$bindableProp-prop$$$bindableProp$$$setBindablePropconstQString&$$$bindablePropChanged -->
<h3 class="fn" translate="no" id="bindableProp-prop"><code class="details extra" translate="no">[bindable]</code> <span class="name">bindableProp</span> : <span class="type">QString</span></h3>
-<div class="admonition note"><p><b>Note: </b>This property supports <a href="https://wiki.qt.io/QProperty" translate="no">QProperty</a> bindings.</p>
+<div class="admonition note"><p><b>Note: </b>This property supports <a href="https://wiki.qt.io/QProperty">QProperty</a> bindings.</p>
</div><p>Some property.</p>
<p><b>See also </b><a href="testqdoc-testderived.html#someProp-prop" translate="no">someProp</a>.</p>
<!-- @@@bindableProp -->
@@ -141,7 +141,7 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr>
<!-- @@@name -->
<!-- $$$someProp-prop$$$someProp -->
<h3 class="fn" translate="no" id="someProp-prop"><code class="details extra" translate="no">[bindable read-only]</code> <span class="name">someProp</span> : <span class="type">QString</span></h3>
-<div class="admonition note"><p><b>Note: </b>This property supports <a href="https://wiki.qt.io/QProperty" translate="no">QProperty</a> bindings.</p>
+<div class="admonition note"><p><b>Note: </b>This property supports <a href="https://wiki.qt.io/QProperty">QProperty</a> bindings.</p>
</div><p>Another property.</p>
<!-- @@@someProp -->
</div>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/uicomponents-qmlmodule.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/uicomponents-qmlmodule.html
index 0b7e08864..e45470a92 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/uicomponents-qmlmodule.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/uicomponents-qmlmodule.html
@@ -12,7 +12,7 @@
<!-- $$$UIComponents-description -->
<div class="descr" id="details">
<p>This is a listing of a list of UI components implemented by QML types. These files are available for general import and they are based on the Qt Quick Code Samples.</p>
-<p>This module is part of the <a href="test-componentset-example.html" translate="no">UIComponents</a> example.</p>
+<p>This module is part of the <a href="test-componentset-example.html">UIComponents</a> example.</p>
</div>
<!-- @@@UIComponents -->
<div class="table"><table class="annotated">
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/properties.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/properties.qdoc
index 95aa3635c..1370f813b 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/properties.qdoc
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/properties.qdoc
@@ -39,7 +39,7 @@
/*!
\qmltype TheType
- \instantiates TestQDoc::TestDerived
+ \nativetype TestQDoc::TestDerived
\inqmlmodule TheModule
*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/type.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/type.cpp
index 8bd99a82b..956616ed7 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/type.cpp
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/qml/type.cpp
@@ -29,7 +29,7 @@
/*!
\qmltype Type
- \instantiates TestQDoc::Test
+ \nativetype TestQDoc::Test
\inqmlmodule QDoc.Test
\brief A QML type documented in a .cpp file.
\meta status { <Work In Progress> }
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/testcpp.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/testcpp.h
index 06126494a..8f75bb467 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/testcpp.h
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/testcpp.h
@@ -9,7 +9,7 @@
#endif
#define QDOCTEST_MACRO test
-#define QDOCTEST_MACRO2(x) (x) < 0 ? 0 : (x))
+#define QDOCTEST_MACRO2(x) (x) < 0 ? 0 : (x)
namespace TestQDoc {
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/html/testheader.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/html/testheader.html
index 9952a0fb3..a728ddd12 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/html/testheader.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/headerfile/expected/html/testheader.html
@@ -7,7 +7,7 @@
<title>&lt;TestHeader&gt; - Test Header | HeaderFile</title>
</head>
<body>
-<li><a href="headers.html" translate="no">Headers</a></li>
+<li><a href="headers.html">Headers</a></li>
<li>&lt;TestHeader&gt; - Test Header</li>
<div class="sidebar">
<div class="toc">
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/brief-adventures.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/brief-adventures.html
index 009104a6f..1600b124c 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/brief-adventures.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/illformatted_documentation/expected/html/brief-adventures.html
@@ -20,7 +20,7 @@
<div class="descr" id="details">
<p>The purpose of this test data is to provide a regression mechanism as part of QDoc's end-to-end test, tst_generatedOutput, for an issue (QTBUG-70959) that was reported against QDoc's \keyword command. The issue, as experienced by the reporter of the bug, is that if the \keyword command isn't followed by a new command, or is the last command in a paragraph, the following paragraph is &quot;eaten&quot;. That means the entire paragraph is understood by QDoc as keywords and included as html meta information instead of as part of the rendered output.</p>
<h2 id="further-details">Further details</h2>
-<p>The bug report is at <a href="https://bugreports.qt.io/browse/QTBUG-70959" translate="no">https://bugreports.qt.io/browse/QTBUG-70959</a>. It refers to a change that bypassed the issue by moving the \keyword command, at <a href="https://codereview.qt-project.org/c/qt/qtdoc/+/242033/" translate="no">https://codereview.qt-project.org/c/qt/qtdoc/+/242033/</a>.</p>
+<p>The bug report is at <a href="https://bugreports.qt.io/browse/QTBUG-70959">https://bugreports.qt.io/browse/QTBUG-70959</a>. It refers to a change that bypassed the issue by moving the \keyword command, at <a href="https://codereview.qt-project.org/c/qt/qtdoc/+/242033/">https://codereview.qt-project.org/c/qt/qtdoc/+/242033/</a>.</p>
</div>
<!-- @@@brief-adventures.html -->
</body>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/a-page-with-a-line-comment-in-the-see-also-command.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/a-page-with-a-line-comment-in-the-see-also-command.html
index 27ba4c2a3..a7b95776d 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/a-page-with-a-line-comment-in-the-see-also-command.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/a-page-with-a-line-comment-in-the-see-also-command.html
@@ -12,7 +12,7 @@
<div class="descr" id="details">
<p>QDoc's \sa command doesn't respect QDoc's line comments.</p>
</div>
-<p><b>See also </b><a href="another-page-with-an-image-at-the-top.html" translate="no">This page starts with an image</a> and <a href="line-comment-adventures.html" translate="no">Adventures with QDoc's line comments</a>.</p>
+<p><b>See also </b><a href="another-page-with-an-image-at-the-top.html">This page starts with an image</a> and <a href="line-comment-adventures.html">Adventures with QDoc's line comments</a>.</p>
<!-- @@@a-page-with-a-line-comment-in-the-see-also-command.html -->
</body>
</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/line-comment-adventures.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/line-comment-adventures.html
index 1b1ab281c..89ab9e527 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/line-comment-adventures.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/line_comments/expected/html/line-comment-adventures.html
@@ -20,7 +20,7 @@
<div class="descr" id="details">
<p>The purpose of this test data is to provide a regression mechanism as part of QDoc's end-to-end test, tst_generatedOutput, for an issue (QTBUG-105754) that was reported against QDoc's \sa command. The issue, as experienced by the reporter of the bug, is that if the \sa command is followed by a line comment, QDoc generates a series of &quot;Missing comma in \sa&quot; warnings.</p>
<h2 id="further-details">Further details</h2>
-<p>The bug report is at <a href="https://bugreports.qt.io/browse/QTBUG-105754" translate="no">https://bugreports.qt.io/browse/QTBUG-105754</a>.</p>
+<p>The bug report is at <a href="https://bugreports.qt.io/browse/QTBUG-105754">https://bugreports.qt.io/browse/QTBUG-105754</a>.</p>
</div>
<!-- @@@line-comment-adventures.html -->
</body>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/cppmodule-module-suffix.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/cppmodule-module-suffix.xml
new file mode 100644
index 000000000..3f02a1a2c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/cppmodule-module-suffix.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.2" xml:lang="en">
+<db:info>
+<db:title></db:title>
+<db:productname>ModifiedOutputFilenames</db:productname>
+<db:titleabbrev>ModifiedOutputFilenames Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>ModifiedOutputFilenames Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:section xml:id="namespaces">
+<db:title>Namespaces</db:title>
+<db:itemizedlist role="namespaces">
+<db:listitem>
+<db:para><db:link xlink:href="prefix-namespace-suffix.xml" xlink:role="namespace">Namespace</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:section>
+<db:section xml:id="classes">
+<db:title>Classes</db:title>
+<db:itemizedlist role="classes">
+<db:listitem>
+<db:para><db:link xlink:href="prefix-namespace-class-suffix.xml" xlink:role="class">Namespace::Class</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/group.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/group.xml
new file mode 100644
index 000000000..f3f0b072d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/group.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.2" xml:lang="en">
+<db:info>
+<db:title></db:title>
+<db:productname>ModifiedOutputFilenames</db:productname>
+<db:titleabbrev>ModifiedOutputFilenames Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>ModifiedOutputFilenames Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:anchor xml:id="details"/>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/modifiedoutputfilenames-test-example.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/modifiedoutputfilenames-test-example.xml
new file mode 100644
index 000000000..0cd81f137
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/modifiedoutputfilenames-test-example.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.2" xml:lang="en">
+<db:info>
+<db:title></db:title>
+<db:productname>ModifiedOutputFilenames</db:productname>
+<db:titleabbrev>ModifiedOutputFilenames Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>ModifiedOutputFilenames Reference Documentation.</db:para></db:abstract>
+</db:info>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/page.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/page.xml
new file mode 100644
index 000000000..0cd81f137
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/page.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.2" xml:lang="en">
+<db:info>
+<db:title></db:title>
+<db:productname>ModifiedOutputFilenames</db:productname>
+<db:titleabbrev>ModifiedOutputFilenames Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>ModifiedOutputFilenames Reference Documentation.</db:para></db:abstract>
+</db:info>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/prefix-header-suffix.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/prefix-header-suffix.xml
new file mode 100644
index 000000000..f58083323
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/prefix-header-suffix.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.2" xml:lang="en">
+<db:info>
+<db:title>&lt;header&gt;</db:title>
+<db:productname>ModifiedOutputFilenames</db:productname>
+<db:titleabbrev>ModifiedOutputFilenames Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>ModifiedOutputFilenames Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>header</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/prefix-namespace-class-suffix.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/prefix-namespace-class-suffix.xml
new file mode 100644
index 000000000..74bddeb56
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/prefix-namespace-class-suffix.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.2" xml:lang="en">
+<db:info>
+<db:title>Class Class</db:title>
+<db:subtitle>Namespace::Class</db:subtitle>
+<db:productname>ModifiedOutputFilenames</db:productname>
+<db:titleabbrev>ModifiedOutputFilenames Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>ModifiedOutputFilenames Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>Class</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/prefix-namespace-suffix.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/prefix-namespace-suffix.xml
new file mode 100644
index 000000000..7b4cc8313
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/prefix-namespace-suffix.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.2" xml:lang="en">
+<db:info>
+<db:title>Namespace Namespace</db:title>
+<db:productname>ModifiedOutputFilenames</db:productname>
+<db:titleabbrev>ModifiedOutputFilenames Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>ModifiedOutputFilenames Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>Namespace</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+</db:section>
+<db:section xml:id="classes">
+<db:title>Classes</db:title>
+<db:section>
+<db:title>class <db:link xlink:href="prefix-namespace-class-suffix.xml" xlink:role="class">Class</db:link></db:title>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/qml-qmlmodule-suffix-type.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/qml-qmlmodule-suffix-type.xml
new file mode 100644
index 000000000..3f6ae500d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/qml-qmlmodule-suffix-type.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.2" xml:lang="en">
+<db:info>
+<db:title>Type QML Type</db:title>
+<db:productname>ModifiedOutputFilenames</db:productname>
+<db:titleabbrev>ModifiedOutputFilenames Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>ModifiedOutputFilenames Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Import Statement</db:term>
+<db:listitem>
+<db:para>import QmlModule</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/qmlmodule-qmlmodule-suffix.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/qmlmodule-qmlmodule-suffix.xml
new file mode 100644
index 000000000..ce4324812
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/docbook/qmlmodule-qmlmodule-suffix.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.2" xml:lang="en">
+<db:info>
+<db:title></db:title>
+<db:productname>ModifiedOutputFilenames</db:productname>
+<db:titleabbrev>ModifiedOutputFilenames Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>ModifiedOutputFilenames Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:anchor xml:id="details"/>
+<db:itemizedlist role="members">
+<db:listitem>
+<db:para><db:link xlink:href="qml-qmlmodule-suffix-type.xml" xlink:role="">Type</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/cppmodule-module-suffix.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/cppmodule-module-suffix.html
new file mode 100644
index 000000000..4ee779cd8
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/cppmodule-module-suffix.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- test.cpp -->
+ <title>ModifiedOutputFilenames</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#namespaces">Namespaces</a></li>
+<li class="level1"><a href="#classes">Classes</a></li>
+<li class="level1"><a href="#details">Detailed Description</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h2 id="namespaces">Namespaces</h2>
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="prefix-namespace-suffix.html">Namespace</a></p></td></tr>
+</table></div>
+<h2 id="classes">Classes</h2>
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="prefix-namespace-class-suffix.html">Namespace::Class</a></p></td></tr>
+</table></div>
+<!-- $$$CppModule-description -->
+<div class="descr" id="details">
+</div>
+<!-- @@@CppModule -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/group.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/group.html
new file mode 100644
index 000000000..ba2903f2d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/group.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- test.cpp -->
+ <title>ModifiedOutputFilenames</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<!-- $$$group-description -->
+<div class="descr" id="details">
+</div>
+<!-- @@@group -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/modifiedoutputfilenames-test-example.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/modifiedoutputfilenames-test-example.html
new file mode 100644
index 000000000..cfea1c3bd
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/modifiedoutputfilenames-test-example.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- test.cpp -->
+ <title>ModifiedOutputFilenames</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<!-- $$$test-description -->
+<div class="descr" id="details">
+</div>
+<!-- @@@test -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/modifiedoutputfilenames.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/modifiedoutputfilenames.index
new file mode 100644
index 000000000..0f67183b2
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/modifiedoutputfilenames.index
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="ModifiedOutputFilenames Reference Documentation" version="" project="ModifiedOutputFilenames">
+ <namespace name="" href="prefix-suffix.html" status="active" access="public" module="modifiedoutputfilenames">
+ <header name="&lt;header&gt;" href="prefix-header-suffix.html" status="active" documented="true" module="CppModule" title="&lt;header&gt;" fulltitle="&lt;header&gt;" subtitle=""/>
+ <namespace name="Namespace" href="prefix-namespace-suffix.html" status="active" access="public" location="test.h" documented="true" module="CppModule">
+ <class name="Class" fullname="Namespace::Class" href="prefix-namespace-class-suffix.html" status="active" access="public" location="test.h" documented="true" module="CppModule"/>
+ </namespace>
+ <qmlclass name="Type" qml-module-name="QmlModule" fullname="QmlModule.Type" href="qml-qmlmodule-suffix-type.html" status="active" access="public" documented="true" title="Type" fulltitle="Type" subtitle=""/>
+ <page name="page.html" href="page.html" status="active" documented="true" subtype="page" title="" fulltitle="" subtitle=""/>
+ <page name="test" href="modifiedoutputfilenames-test-example.html" status="active" documented="true" subtype="example" title="" fulltitle="" subtitle=""/>
+ <group name="group" href="group.html" status="active" documented="true" seen="true" title=""/>
+ <module name="CppModule" href="cppmodule-module-suffix.html" status="active" documented="true" seen="true" title=""/>
+ <qmlmodule name="QmlModule" qml-module-name="QmlModule" href="qmlmodule-qmlmodule-suffix.html" status="active" documented="true" seen="true" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/page.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/page.html
new file mode 100644
index 000000000..a5067395b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/page.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- test.cpp -->
+ <title>ModifiedOutputFilenames</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<!-- $$$page.html-description -->
+<div class="descr" id="details">
+</div>
+<!-- @@@page.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/prefix-header-suffix.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/prefix-header-suffix.html
new file mode 100644
index 000000000..75ce2b54b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/prefix-header-suffix.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- test.cpp -->
+ <title>&lt;header&gt; | ModifiedOutputFilenames</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">&lt;header&gt;</h1>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;header&gt;</span></td></tr>
+</table></div>
+<!-- $$$<header>-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@<header> -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/prefix-namespace-class-suffix.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/prefix-namespace-class-suffix.html
new file mode 100644
index 000000000..757a4aed4
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/prefix-namespace-class-suffix.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- test.cpp -->
+ <title>Class Class | ModifiedOutputFilenames</title>
+</head>
+<body>
+<li>Class</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#details">Detailed Description</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">Class Class</h1>
+<span class="small-subtitle" translate="no">class <a href="prefix-namespace-suffix.html" translate="no">Namespace</a>::Class</span>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;Class&gt;</span></td></tr>
+</table></div>
+<!-- $$$Class-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@Class -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/prefix-namespace-suffix.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/prefix-namespace-suffix.html
new file mode 100644
index 000000000..e3f4342d7
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/prefix-namespace-suffix.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- test.cpp -->
+ <title>Namespace Namespace | ModifiedOutputFilenames</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#classes">Classes</a></li>
+<li class="level1"><a href="#details">Detailed Description</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">Namespace Namespace</h1>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;Namespace&gt;</span></td></tr>
+</table></div>
+<h2 id="classes">Classes</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> class </td><td class="memItemRight bottomAlign"><b><a href="prefix-namespace-class-suffix.html" translate="no">Class</a></b></td></tr>
+</table></div>
+<!-- $$$Namespace-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@Namespace -->
+<div class="classes">
+<h2>Classes</h2>
+<h3> class <a href="prefix-namespace-class-suffix.html">Class</a></h3></div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/qml-qmlmodule-suffix-type-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/qml-qmlmodule-suffix-type-members.html
new file mode 100644
index 000000000..c3ba341de
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/qml-qmlmodule-suffix-type-members.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- test.cpp -->
+ <title>List of All Members for Type | ModifiedOutputFilenames</title>
+</head>
+<body>
+<li>Type</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for Type</h1>
+<p>This is the complete list of members for <a href="qml-qmlmodule-suffix-type.html">Type</a>, including inherited members.</p>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/qml-qmlmodule-suffix-type.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/qml-qmlmodule-suffix-type.html
new file mode 100644
index 000000000..f2324bbee
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/qml-qmlmodule-suffix-type.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- test.cpp -->
+ <title>Type QML Type | ModifiedOutputFilenames</title>
+</head>
+<body>
+<li>Type</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#details">Detailed Description</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">Type QML Type</h1>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> Import Statement:</td><td class="memItemRight bottomAlign"> import QmlModule</td></tr></table></div><ul>
+<li><a href="qml-qmlmodule-suffix-type-members.html">List of all members, including inherited members</a></li>
+</ul>
+<!-- $$$Type-description -->
+<h2 id="details">Detailed Description</h2>
+<!-- @@@Type -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/qmlmodule-qmlmodule-suffix.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/qmlmodule-qmlmodule-suffix.html
new file mode 100644
index 000000000..2fe3ae3d6
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/html/qmlmodule-qmlmodule-suffix.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- test.cpp -->
+ <title>ModifiedOutputFilenames</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<!-- $$$QmlModule-description -->
+<div class="descr" id="details">
+</div>
+<!-- @@@QmlModule -->
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="qml-qmlmodule-suffix-type.html">Type</a></p></td></tr>
+</table></div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/cppmodule-module-suffix.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/cppmodule-module-suffix.webxml
new file mode 100644
index 000000000..5d24b3077
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/cppmodule-module-suffix.webxml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document/>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/group.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/group.webxml
new file mode 100644
index 000000000..8b8147e6a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/group.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <group name="group" href="group.html" status="active" documented="true" seen="true" title="">
+ <description>
+ <table width="100%"/>
+ </description>
+ </group>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/modifiedoutputfilenames-test-example.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/modifiedoutputfilenames-test-example.webxml
new file mode 100644
index 000000000..2f92a9490
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/modifiedoutputfilenames-test-example.webxml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="test" href="modifiedoutputfilenames-test-example.html" status="active" documented="true" subtype="example" title="" fulltitle="" subtitle="">
+ <description/>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/modifiedoutputfilenames.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/modifiedoutputfilenames.index
new file mode 100644
index 000000000..0f67183b2
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/modifiedoutputfilenames.index
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="ModifiedOutputFilenames Reference Documentation" version="" project="ModifiedOutputFilenames">
+ <namespace name="" href="prefix-suffix.html" status="active" access="public" module="modifiedoutputfilenames">
+ <header name="&lt;header&gt;" href="prefix-header-suffix.html" status="active" documented="true" module="CppModule" title="&lt;header&gt;" fulltitle="&lt;header&gt;" subtitle=""/>
+ <namespace name="Namespace" href="prefix-namespace-suffix.html" status="active" access="public" location="test.h" documented="true" module="CppModule">
+ <class name="Class" fullname="Namespace::Class" href="prefix-namespace-class-suffix.html" status="active" access="public" location="test.h" documented="true" module="CppModule"/>
+ </namespace>
+ <qmlclass name="Type" qml-module-name="QmlModule" fullname="QmlModule.Type" href="qml-qmlmodule-suffix-type.html" status="active" access="public" documented="true" title="Type" fulltitle="Type" subtitle=""/>
+ <page name="page.html" href="page.html" status="active" documented="true" subtype="page" title="" fulltitle="" subtitle=""/>
+ <page name="test" href="modifiedoutputfilenames-test-example.html" status="active" documented="true" subtype="example" title="" fulltitle="" subtitle=""/>
+ <group name="group" href="group.html" status="active" documented="true" seen="true" title=""/>
+ <module name="CppModule" href="cppmodule-module-suffix.html" status="active" documented="true" seen="true" title=""/>
+ <qmlmodule name="QmlModule" qml-module-name="QmlModule" href="qmlmodule-qmlmodule-suffix.html" status="active" documented="true" seen="true" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/page.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/page.webxml
new file mode 100644
index 000000000..77523428b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/page.webxml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="page.html" href="page.html" status="active" documented="true" subtype="page" title="" fulltitle="" subtitle="">
+ <description/>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/prefix-header-suffix.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/prefix-header-suffix.webxml
new file mode 100644
index 000000000..bc42d90dd
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/prefix-header-suffix.webxml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <header name="&lt;header&gt;" href="prefix-header-suffix.html" status="active" documented="true" module="CppModule" title="&lt;header&gt;" fulltitle="&lt;header&gt;" subtitle="">
+ <description/>
+ </header>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/prefix-namespace-class-suffix.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/prefix-namespace-class-suffix.webxml
new file mode 100644
index 000000000..4ee5dee79
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/prefix-namespace-class-suffix.webxml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="Class" fullname="Namespace::Class" href="prefix-namespace-class-suffix.html" status="active" access="public" location="test.h" documented="true" module="CppModule">
+ <description/>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/prefix-namespace-suffix.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/prefix-namespace-suffix.webxml
new file mode 100644
index 000000000..e46a0cfb3
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/prefix-namespace-suffix.webxml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <namespace name="Namespace" href="prefix-namespace-suffix.html" status="active" access="public" location="test.h" documented="true" module="CppModule">
+ <description/>
+ <class name="Class" fullname="Namespace::Class" href="prefix-namespace-class-suffix.html" status="active" access="public" location="test.h" documented="true" module="CppModule">
+ <description/>
+ </class>
+ </namespace>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/qmlmodule-qmlmodule-suffix.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/qmlmodule-qmlmodule-suffix.webxml
new file mode 100644
index 000000000..5d24b3077
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/expected/webxml/qmlmodule-qmlmodule-suffix.webxml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document/>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/modifiedoutputfilenames.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/modifiedoutputfilenames.qdocconf
new file mode 100644
index 000000000..5cf3ce867
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/modifiedoutputfilenames.qdocconf
@@ -0,0 +1,22 @@
+project = ModifiedOutputFilenames
+
+{sourcedirs,headerdirs} = ./src
+exampledirs = ./src/example
+
+outputprefixes = CPP
+outputprefixes.CPP = prefix_
+
+outputsuffixes = QML CPP
+{outputsuffixes.CPP,outputsuffixes.QML} = _suffix
+
+locationinfo = false
+warninglimit = 0
+warninglimit.enabled = true
+
+outputformats = WebXML HTML DocBook
+{WebXML.nosubdirs,HTML.nosubdirs,DocBook.nosubdirs} = true
+WebXML.quotinginformation = true
+
+WebXML.outputsubdir = webxml
+HTML.outputsubdir = html
+DocBook.outputsubdir = docbook
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/src/example/test/CMakeLists.txt b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/src/example/test/CMakeLists.txt
new file mode 100644
index 000000000..b2a4ba591
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/src/example/test/CMakeLists.txt
@@ -0,0 +1 @@
+# nothing here
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/src/test.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/src/test.cpp
new file mode 100644
index 000000000..81f5b725f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/src/test.cpp
@@ -0,0 +1,24 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+/*! \module CppModule */
+
+/*! \qmlmodule QmlModule */
+
+/*! \headerfile <header>
+ \inmodule CppModule */
+
+/*! \namespace Namespace
+ \inmodule CppModule */
+
+/*! \class Namespace::Class
+ \inmodule CppModule */
+
+/*! \qmltype Type
+ \inqmlmodule QmlModule */
+
+/*! \page page.html */
+
+/*! \group group */
+
+/*! \example test */
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/src/test.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/src/test.h
new file mode 100644
index 000000000..3d52569d2
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/modifiedoutputfilenames/src/test.h
@@ -0,0 +1,12 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+namespace Namespace {
+
+class Class {};
+
+} // namespace
+
+void func() {}
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/adventures-with-non-ascii-characters.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/adventures-with-non-ascii-characters.html
index 4eeb77a6d..9552c867f 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/adventures-with-non-ascii-characters.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/non_ascii_character_input/expected/adventures-with-non-ascii-characters.html
@@ -37,7 +37,7 @@
<p>The reporter states that this link doesn't work, presumably because it begins with the Chinese character &quot;属&quot;.</p>
<p>这就是属性视图</p>
<h2 id="further-details">Further details</h2>
-<p>The bug report is at <a href="https://bugreports.qt.io/browse/QTBUG-64506" translate="no">https://bugreports.qt.io/browse/QTBUG-64506</a>. It contains the content used to trigger the behavior in this test case. The Chinese characters are copied verbatim from the report.</p>
+<p>The bug report is at <a href="https://bugreports.qt.io/browse/QTBUG-64506">https://bugreports.qt.io/browse/QTBUG-64506</a>. It contains the content used to trigger the behavior in this test case. The Chinese characters are copied verbatim from the report.</p>
<h3 id="ascii-characters-that-are-non-printable-ascii-such-as-or-521d09f0">Ascii characters that are non-printable ascii, such as ß, ü, or ø</h3>
<p>A whole range of ascii characters are not printable ascii characters. These could also cause issues for QDoc. This section is here to confirm linking to such section titles works as expected. It's made a section2 to exercise the behavior for other section levels than 1.</p>
</div>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/qdoctests-qdocfileoutput.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/qdoctests-qdocfileoutput.html
index 74570305c..a38d4e3b4 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/qdoctests-qdocfileoutput.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/qdoctests-qdocfileoutput.html
@@ -46,14 +46,14 @@
<h2 id="linking">Linking</h2>
<p>There are multiple ways to create hyperlinks to other topics:</p>
<ul>
-<li><a href="qdoctests-qdocfileoutput-linking.html" translate="no">Linking to a page title</a></li>
-<li><a href="qdoctests-qdocfileoutput-linking.html#link-targets" translate="no">Linking to a section title</a></li>
-<li><a href="qdoctests-qdocfileoutput-linking.html#link-test-target" translate="no">Linking using a \target string</a></li>
-<li><a href="qdoctests-qdocfileoutput-linking.html" translate="no">Linking using a \keyword string</a></li>
+<li><a href="qdoctests-qdocfileoutput-linking.html">Linking to a page title</a></li>
+<li><a href="qdoctests-qdocfileoutput-linking.html#link-targets">Linking to a section title</a></li>
+<li><a href="qdoctests-qdocfileoutput-linking.html#link-test-target">Linking using a \target string</a></li>
+<li><a href="qdoctests-qdocfileoutput-linking.html">Linking using a \keyword string</a></li>
</ul>
<h2 id="qdoc-linking-test">QDoc Linking Test</h2>
<p>This section title is overridden by another target which takes precedence.</p>
-<h2 id="linking-to-something-in-a-section-title">Linking to <a href="qdoctests-qdocfileoutput.html#further-information" translate="no">something</a> in a section title</h2>
+<h2 id="linking-to-something-in-a-section-title">Linking to <a href="qdoctests-qdocfileoutput.html#further-information">something</a> in a section title</h2>
<p>This is allowed but a questionable practice.</p>
<details>
<summary>QDoc details</summary>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/toc.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/toc.html
index 5901538d0..f34ce0db6 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/toc.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/outputfromqdocfiles/expected/html/toc.html
@@ -16,9 +16,9 @@
<!-- $$$toc.html-description -->
<div class="descr" id="details">
<ul>
-<li><a href="qdoctests-qdocfileoutput.html" translate="no">QDoc Testing</a></li>
-<li><a href="qdoctests-qdocfileoutput-linking.html" translate="no">QDoc Linking Test</a></li>
-<li><a href="toc.html" translate="no">Table of Contents</a></li>
+<li><a href="qdoctests-qdocfileoutput.html">QDoc Testing</a></li>
+<li><a href="qdoctests-qdocfileoutput-linking.html">QDoc Linking Test</a></li>
+<li><a href="toc.html">Table of Contents</a></li>
</ul>
</div>
<!-- @@@toc.html -->
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/docbook/cppcar.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/docbook/cppcar.xml
new file mode 100644
index 000000000..0780ec93b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/docbook/cppcar.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.2" xml:lang="en">
+<db:info>
+<db:title>CppCar Class</db:title>
+<db:productname>QML nativetype synopsis test</db:productname>
+<db:titleabbrev>QML nativetype synopsis test Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>A test class with an inventive name.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>CppCar</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>In QML</db:term>
+<db:listitem>
+<db:para><db:link xlink:href="qml-qmlnativetypesynopsis-car.xml" xlink:role="">Car</db:link> and <db:link xlink:href="qml-qmlnativetypesynopsis-truck.xml" xlink:role="">Truck</db:link></db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/docbook/qml-qmlnativetypesynopsis-car.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/docbook/qml-qmlnativetypesynopsis-car.xml
new file mode 100644
index 000000000..196c705a4
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/docbook/qml-qmlnativetypesynopsis-car.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.2" xml:lang="en">
+<db:info>
+<db:title>Car QML Type</db:title>
+<db:productname>QML nativetype synopsis test</db:productname>
+<db:titleabbrev>QML nativetype synopsis test Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>A car.</db:para>
+<db:para>This type was introduced in Qt 6.8.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Import Statement</db:term>
+<db:listitem>
+<db:para>import QmlNativeTypeSynopsis</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since:</db:term>
+<db:listitem>
+<db:para>Qt 6.8</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>In C++:</db:term>
+<db:listitem>
+<db:para><db:link xlink:href="cppcar.xml">CppCar</db:link></db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Group</db:term>
+<db:listitem>
+<db:para>Car is part of <db:simplelist><db:member>qml_nativetype_synopsis</db:member></db:simplelist>
+</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+<db:section xml:id="properties">
+<db:title>Properties</db:title>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:code>color</db:code> The color of the car.</db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:section>
+<db:section xml:id="signals">
+<db:title>Signals</db:title>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:code>engineStarted()</db:code> Emitted when the engine is started.</db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:section>
+<db:section xml:id="methods">
+<db:title>Methods</db:title>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:code>startEngine()</db:code> Starts the engine.</db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/docbook/qml-qmlnativetypesynopsis-truck.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/docbook/qml-qmlnativetypesynopsis-truck.xml
new file mode 100644
index 000000000..c4203a54d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/docbook/qml-qmlnativetypesynopsis-truck.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.2" xml:lang="en">
+<db:info>
+<db:title>Truck QML Type</db:title>
+<db:productname>QML nativetype synopsis test</db:productname>
+<db:titleabbrev>QML nativetype synopsis test Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>A big car.</db:para>
+<db:para>This type was introduced in Qt 6.8.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Import Statement</db:term>
+<db:listitem>
+<db:para>import QmlNativeTypeSynopsis</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Since:</db:term>
+<db:listitem>
+<db:para>Qt 6.8</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>In C++:</db:term>
+<db:listitem>
+<db:para><db:link xlink:href="cppcar.xml">CppCar</db:link></db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term>Group</db:term>
+<db:listitem>
+<db:para>Truck is part of <db:simplelist><db:member>qml_nativetype_synopsis</db:member></db:simplelist>
+</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+<db:section xml:id="properties">
+<db:title>Properties</db:title>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:code>color</db:code> The color of the big car.</db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:section>
+<db:section xml:id="signals">
+<db:title>Signals</db:title>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:code>engineStarted()</db:code> Emitted when the big engine is started, along with more emissions than from a <db:link xlink:href="qml-qmlnativetypesynopsis-car.xml">Car</db:link>.</db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:section>
+<db:section xml:id="methods">
+<db:title>Methods</db:title>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:code>startEngine()</db:code> Starts the big engine.</db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/docbook/qmlnativetypesynopsis-qmlmodule.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/docbook/qmlnativetypesynopsis-qmlmodule.xml
new file mode 100644
index 000000000..b00c11267
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/docbook/qmlnativetypesynopsis-qmlmodule.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.2" xml:lang="en">
+<db:info>
+<db:title></db:title>
+<db:productname>QML nativetype synopsis test</db:productname>
+<db:titleabbrev>QML nativetype synopsis test Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>QML nativetype synopsis test Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:anchor xml:id="details"/>
+<db:variablelist role="members">
+<db:varlistentry>
+<db:term><db:link xlink:href="qml-qmlnativetypesynopsis-car.xml" xlink:role="">Car</db:link></db:term>
+<db:listitem>
+<db:para>A car.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="qml-qmlnativetypesynopsis-truck.xml" xlink:role="">Truck</db:link></db:term>
+<db:listitem>
+<db:para>A big car.</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/cppcar.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/cppcar.html
new file mode 100644
index 000000000..fcee3e277
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/cppcar.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- cppcar.cpp -->
+ <meta name="description" content="A test class with an inventive name.">
+ <title>CppCar Class | QML nativetype synopsis test</title>
+</head>
+<body>
+<li>CppCar</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#details">Detailed Description</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">CppCar Class</h1>
+<!-- $$$CppCar-brief -->
+<p>A test class with an inventive name. <a href="#details">More...</a></p>
+<!-- @@@CppCar -->
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include &lt;CppCar&gt;</span></td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> In QML:</td><td class="memItemRight bottomAlign"> <a href="qml-qmlnativetypesynopsis-car.html" translate="no">Car</a> and <a href="qml-qmlnativetypesynopsis-truck.html" translate="no">Truck</a></td></tr>
+</table></div>
+<!-- $$$CppCar-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+</div>
+<!-- @@@CppCar -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qml-nativetype-synopsis-test.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qml-nativetype-synopsis-test.index
new file mode 100644
index 000000000..a34218849
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qml-nativetype-synopsis-test.index
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="QML nativetype synopsis test Reference Documentation" version="" project="QML nativetype synopsis test">
+ <namespace name="" status="active" access="public" module="qml nativetype synopsis test">
+ <qmlclass name="Car" qml-module-name="QmlNativeTypeSynopsis" fullname="QmlNativeTypeSynopsis.Car" href="qml-qmlnativetypesynopsis-car.html" status="active" access="public" since="6.8" documented="true" groups="qml_nativetype_synopsis" title="Car" fulltitle="Car" subtitle="" brief="A car">
+ <contents name="properties" title="Properties" level="1"/>
+ <contents name="signals" title="Signals" level="1"/>
+ <contents name="methods" title="Methods" level="1"/>
+ </qmlclass>
+ <class name="CppCar" href="cppcar.html" status="active" access="public" location="cppcar.h" documented="true" module="QmlNativeTypeSynopsis" brief="A test class with an inventive name"/>
+ <qmlclass name="Truck" qml-module-name="QmlNativeTypeSynopsis" fullname="QmlNativeTypeSynopsis.Truck" href="qml-qmlnativetypesynopsis-truck.html" status="active" access="public" since="6.8" documented="true" groups="qml_nativetype_synopsis" title="Truck" fulltitle="Truck" subtitle="" brief="A big car">
+ <contents name="properties" title="Properties" level="1"/>
+ <contents name="signals" title="Signals" level="1"/>
+ <contents name="methods" title="Methods" level="1"/>
+ </qmlclass>
+ <group name="qml_nativetype_synopsis" href="qml-nativetype-synopsis.html" status="internal" seen="false" title=""/>
+ <module name="QmlNativeTypeSynopsis" href="qmlnativetypesynopsis-module.html" status="internal" seen="false" title=""/>
+ <qmlmodule name="QmlNativeTypeSynopsis" qml-module-name="QmlNativeTypeSynopsis" href="qmlnativetypesynopsis-qmlmodule.html" status="active" documented="true" seen="true" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qml-qmlnativetypesynopsis-car-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qml-qmlnativetypesynopsis-car-members.html
new file mode 100644
index 000000000..0b42d6968
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qml-qmlnativetypesynopsis-car-members.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- cppcar.cpp -->
+ <meta name="description" content="A car.">
+ <title>List of All Members for Car | QML nativetype synopsis test</title>
+</head>
+<body>
+<li>Car</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for Car</h1>
+<p>This is the complete list of members for <a href="qml-qmlnativetypesynopsis-car.html">Car</a>, including inherited members.</p>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qml-qmlnativetypesynopsis-car.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qml-qmlnativetypesynopsis-car.html
new file mode 100644
index 000000000..5a97c514d
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qml-qmlnativetypesynopsis-car.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- cppcar.cpp -->
+ <meta name="description" content="A car.">
+ <title>Car QML Type | QML nativetype synopsis test</title>
+</head>
+<body>
+<li>Car</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#details">Detailed Description</a></li>
+<li class="level2"><a href="#properties">Properties</a></li>
+<li class="level2"><a href="#signals">Signals</a></li>
+<li class="level2"><a href="#methods">Methods</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">Car QML Type</h1>
+<!-- $$$Car-brief -->
+<p>A car. <a href="#details">More...</a></p>
+<!-- @@@Car -->
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> Import Statement:</td><td class="memItemRight bottomAlign"> import QmlNativeTypeSynopsis</td></tr><tr><td class="memItemLeft rightAlign topAlign"> Since:</td><td class="memItemRight bottomAlign"> Qt 6.8</td></tr><tr><td class="memItemLeft rightAlign topAlign"> In C++:</td><td class="memItemRight bottomAlign"> <a href="cppcar.html" translate="no">CppCar</a></td></tr></table></div><ul>
+<li><a href="qml-qmlnativetypesynopsis-car-members.html">List of all members, including inherited members</a></li>
+</ul>
+<!-- $$$Car-description -->
+<h2 id="details">Detailed Description</h2>
+<h2 id="properties">Properties</h2>
+<ul>
+<li><code translate="no">color</code> The color of the car.</li>
+</ul>
+<h2 id="signals">Signals</h2>
+<ul>
+<li><code translate="no">engineStarted()</code> Emitted when the engine is started.</li>
+</ul>
+<h2 id="methods">Methods</h2>
+<ul>
+<li><code translate="no">startEngine()</code> Starts the engine.</li>
+</ul>
+<!-- @@@Car -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qml-qmlnativetypesynopsis-truck-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qml-qmlnativetypesynopsis-truck-members.html
new file mode 100644
index 000000000..bd7527632
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qml-qmlnativetypesynopsis-truck-members.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- cppcar.cpp -->
+ <meta name="description" content="A big car.">
+ <title>List of All Members for Truck | QML nativetype synopsis test</title>
+</head>
+<body>
+<li>Truck</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for Truck</h1>
+<p>This is the complete list of members for <a href="qml-qmlnativetypesynopsis-truck.html">Truck</a>, including inherited members.</p>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qml-qmlnativetypesynopsis-truck.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qml-qmlnativetypesynopsis-truck.html
new file mode 100644
index 000000000..35d2954e2
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qml-qmlnativetypesynopsis-truck.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- cppcar.cpp -->
+ <meta name="description" content="A big car.">
+ <title>Truck QML Type | QML nativetype synopsis test</title>
+</head>
+<body>
+<li>Truck</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#details">Detailed Description</a></li>
+<li class="level2"><a href="#properties">Properties</a></li>
+<li class="level2"><a href="#signals">Signals</a></li>
+<li class="level2"><a href="#methods">Methods</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">Truck QML Type</h1>
+<!-- $$$Truck-brief -->
+<p>A big car. <a href="#details">More...</a></p>
+<!-- @@@Truck -->
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> Import Statement:</td><td class="memItemRight bottomAlign"> import QmlNativeTypeSynopsis</td></tr><tr><td class="memItemLeft rightAlign topAlign"> Since:</td><td class="memItemRight bottomAlign"> Qt 6.8</td></tr><tr><td class="memItemLeft rightAlign topAlign"> In C++:</td><td class="memItemRight bottomAlign"> <a href="cppcar.html" translate="no">CppCar</a></td></tr></table></div><ul>
+<li><a href="qml-qmlnativetypesynopsis-truck-members.html">List of all members, including inherited members</a></li>
+</ul>
+<!-- $$$Truck-description -->
+<h2 id="details">Detailed Description</h2>
+<h2 id="properties">Properties</h2>
+<ul>
+<li><code translate="no">color</code> The color of the big car.</li>
+</ul>
+<h2 id="signals">Signals</h2>
+<ul>
+<li><code translate="no">engineStarted()</code> Emitted when the big engine is started, along with more emissions than from a <a href="qml-qmlnativetypesynopsis-car.html" translate="no">Car</a>.</li>
+</ul>
+<h2 id="methods">Methods</h2>
+<ul>
+<li><code translate="no">startEngine()</code> Starts the big engine.</li>
+</ul>
+<!-- @@@Truck -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qmlnativetypesynopsis-qmlmodule.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qmlnativetypesynopsis-qmlmodule.html
new file mode 100644
index 000000000..51b6bc311
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/html/qmlnativetypesynopsis-qmlmodule.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- cppcar.cpp -->
+ <title>QML nativetype synopsis test</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<!-- $$$QmlNativeTypeSynopsis-description -->
+<div class="descr" id="details">
+</div>
+<!-- @@@QmlNativeTypeSynopsis -->
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="qml-qmlnativetypesynopsis-car.html">Car</a></p></td><td class="tblDescr"><p>A car</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="qml-qmlnativetypesynopsis-truck.html">Truck</a></p></td><td class="tblDescr"><p>A big car</p></td></tr>
+</table></div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/webxml/cppcar.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/webxml/cppcar.webxml
new file mode 100644
index 000000000..4ff09cfa1
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/webxml/cppcar.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="CppCar" href="cppcar.html" status="active" access="public" location="cppcar.h" documented="true" module="QmlNativeTypeSynopsis" brief="A test class with an inventive name">
+ <description>
+ <brief>A test class with an inventive name.</brief>
+ </description>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/webxml/qml-nativetype-synopsis-test.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/webxml/qml-nativetype-synopsis-test.index
new file mode 100644
index 000000000..a34218849
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/webxml/qml-nativetype-synopsis-test.index
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="QML nativetype synopsis test Reference Documentation" version="" project="QML nativetype synopsis test">
+ <namespace name="" status="active" access="public" module="qml nativetype synopsis test">
+ <qmlclass name="Car" qml-module-name="QmlNativeTypeSynopsis" fullname="QmlNativeTypeSynopsis.Car" href="qml-qmlnativetypesynopsis-car.html" status="active" access="public" since="6.8" documented="true" groups="qml_nativetype_synopsis" title="Car" fulltitle="Car" subtitle="" brief="A car">
+ <contents name="properties" title="Properties" level="1"/>
+ <contents name="signals" title="Signals" level="1"/>
+ <contents name="methods" title="Methods" level="1"/>
+ </qmlclass>
+ <class name="CppCar" href="cppcar.html" status="active" access="public" location="cppcar.h" documented="true" module="QmlNativeTypeSynopsis" brief="A test class with an inventive name"/>
+ <qmlclass name="Truck" qml-module-name="QmlNativeTypeSynopsis" fullname="QmlNativeTypeSynopsis.Truck" href="qml-qmlnativetypesynopsis-truck.html" status="active" access="public" since="6.8" documented="true" groups="qml_nativetype_synopsis" title="Truck" fulltitle="Truck" subtitle="" brief="A big car">
+ <contents name="properties" title="Properties" level="1"/>
+ <contents name="signals" title="Signals" level="1"/>
+ <contents name="methods" title="Methods" level="1"/>
+ </qmlclass>
+ <group name="qml_nativetype_synopsis" href="qml-nativetype-synopsis.html" status="internal" seen="false" title=""/>
+ <module name="QmlNativeTypeSynopsis" href="qmlnativetypesynopsis-module.html" status="internal" seen="false" title=""/>
+ <qmlmodule name="QmlNativeTypeSynopsis" qml-module-name="QmlNativeTypeSynopsis" href="qmlnativetypesynopsis-qmlmodule.html" status="active" documented="true" seen="true" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/webxml/qmlnativetypesynopsis-qmlmodule.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/webxml/qmlnativetypesynopsis-qmlmodule.webxml
new file mode 100644
index 000000000..5d24b3077
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/expected/webxml/qmlnativetypesynopsis-qmlmodule.webxml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document/>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/qml_nativetype_synopsis.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/qml_nativetype_synopsis.qdocconf
new file mode 100644
index 000000000..522746eb6
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/qml_nativetype_synopsis.qdocconf
@@ -0,0 +1,23 @@
+project = QML nativetype synopsis test
+
+locationinfo = false
+
+headers.fileextensions = "*.h *.hpp"
+sources.fileextensions = "*.cpp *.qml *.qdoc"
+
+headerdirs = ./src
+sourcedirs = ./src
+
+warninglimit = 0
+warninglimit.enabled = true
+
+outputformats = WebXML HTML DocBook
+WebXML.quotinginformation = true
+WebXML.nosubdirs = true
+WebXML.outputsubdir = webxml
+
+HTML.nosubdirs = true
+HTML.outputsubdir = html
+
+DocBook.nosubdirs = true
+DocBook.outputsubdir = docbook
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/src/cppcar.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/src/cppcar.cpp
new file mode 100644
index 000000000..451ec6010
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/src/cppcar.cpp
@@ -0,0 +1,68 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "cppcar.h"
+
+/*!
+ \qmlmodule QmlNativeTypeSynopsis
+ */
+
+/*!
+ \qmltype Car
+ \nativetype CppCar
+ \inqmlmodule QmlNativeTypeSynopsis
+ \ingroup qml_nativetype_synopsis
+ \since 6.8
+ \brief A car.
+
+ \section1 Properties
+
+ \list
+ \li \c{color} The color of the car.
+ \endlist
+
+ \section1 Signals
+
+ \list
+ \li \c{engineStarted()} Emitted when the engine is started.
+ \endlist
+
+ \section1 Methods
+
+ \list
+ \li \c{startEngine()} Starts the engine.
+ \endlist
+ */
+
+/*!
+ \class CppCar
+ \inmodule QmlNativeTypeSynopsis
+ \brief A test class with an inventive name.
+ */
+
+/*!
+ \qmltype Truck
+ \nativetype CppCar
+ \inqmlmodule QmlNativeTypeSynopsis
+ \ingroup qml_nativetype_synopsis
+ \since 6.8
+ \brief A big car.
+
+ \section1 Properties
+
+ \list
+ \li \c{color} The color of the big car.
+ \endlist
+
+ \section1 Signals
+
+ \list
+ \li \c{engineStarted()} Emitted when the big engine is started, along with more emissions than from a \l Car.
+ \endlist
+
+ \section1 Methods
+
+ \list
+ \li \c{startEngine()} Starts the big engine.
+ \endlist
+ */
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/src/cppcar.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/src/cppcar.h
new file mode 100644
index 000000000..dce5afb32
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/qml_nativetype_synopsis/src/cppcar.h
@@ -0,0 +1,10 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef CAR_H
+#define CAR_H
+
+class CppCar {
+};
+
+#endif // CAR_H
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/autolinking.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/autolinking.html
index 444c3d0d1..ac04c33cd 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/autolinking.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/autolinking.html
@@ -19,7 +19,7 @@
<!-- $$$autolinking.html-description -->
<div class="descr" id="details">
<h2 id="testqdoc">TestQDoc</h2>
-<p>The string <a href="testqdoc.html" translate="no">TestQDoc</a> links to the C++ namespace unless linking explicitly, <a href="autolinking.html#testqdoc" translate="no">like this</a>, or <a href="testqdoc.html" translate="no">this</a>. Also,</p>
+<p>The string <a href="testqdoc.html" translate="no">TestQDoc</a> links to the C++ namespace unless linking explicitly, <a href="autolinking.html#testqdoc">like this</a>, or <a href="testqdoc.html" translate="no">this</a>. Also,</p>
<p>Autolinks:</p>
<ul>
<li><a href="testqdoc-testderived.html" translate="no">TestQDoc::TestDerived</a></li>
@@ -27,7 +27,7 @@
<p>Explicit links:</p>
<ul>
<li><a href="testqdoc-testderived.html" translate="no">TestQDoc::TestDerived</a></li>
-<li><a href="obsolete-classes.html#testqdoc" translate="no">Obsolete Classes#TestQDoc</a></li>
+<li><a href="obsolete-classes.html#testqdoc">Obsolete Classes#TestQDoc</a></li>
</ul>
<h2 id="someprop">someProp</h2>
</div>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testcpp-module.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testcpp-module.html
index 826926d59..83ab5b175 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testcpp-module.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testcpp-module.html
@@ -48,7 +48,7 @@
<li><a href="testcpp-module.html#section" translate="no">section()</a></li>
<li><a href="testcpp-module.html#section" translate="no">section() is a section title</a></li>
<li><a href="testqdoc-test.html#Test" translate="no">open( parenthesis</a></li>
-<li><a href="https://en.cppreference.com/w/cpp/utility/move" translate="no">C++11 added std::move(T&amp;&amp; t)</a></li>
+<li><a href="https://en.cppreference.com/w/cpp/utility/move">C++11 added std::move(T&amp;&amp; t)</a></li>
</ul>
<h4 id="section">section()</h4>
</div>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-test.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-test.html
index b1efd4d91..19038e75c 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-test.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-test.html
@@ -41,7 +41,7 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr>
<li><a href="testqdoc-test-obsolete.html">Deprecated members</a></li>
<li>Test is part of <a href="cpptypes.html">Test C++ Types</a>.</li>
</ul>
-<p><b>Note:</b> All functions in this class are <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" translate="no">reentrant</a> with the following exceptions:</p>
+<p><b>Note:</b> All functions in this class are <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</a> with the following exceptions:</p>
<ul>
<li><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a>(int i, bool b) const</li>
</ul>
@@ -153,7 +153,7 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr>
<!-- $$$someFunctionDefaultArg[overload1]$$$someFunctionDefaultArgintbool -->
<h3 class="fn" translate="no" id="someFunctionDefaultArg"><span class="type">void</span> Test::<span class="name">someFunctionDefaultArg</span>(<span class="type">int</span> <i>i</i>, <span class="type">bool</span> <i>b</i> = false) const</h3>
<p>Function that takes a parameter <i translate="no">i</i> and <i translate="no">b</i>.</p>
-<p><b>Warning:</b> This function is not <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" translate="no">reentrant</a>.</p>
+<p><b>Warning:</b> This function is not <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</a>.</p>
<!-- @@@someFunctionDefaultArg -->
<!-- $$$virtualFun[overload1]$$$virtualFun -->
<h3 class="fn" translate="no" id="virtualFun"><code class="details extra" translate="no">[virtual]</code> <span class="type">void</span> Test::<span class="name">virtualFun</span>()</h3>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/autolinking.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/autolinking.html
index c5c8511d7..689afdfb9 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/autolinking.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/autolinking.html
@@ -19,7 +19,7 @@
<!-- $$$autolinking.html-description -->
<div class="descr" id="details">
<h2 id="testqdoc">TestQDoc</h2>
-<p>The string <a href="testqdoc.html" translate="no">TestQDoc</a> links to the C++ namespace unless linking explicitly, <a href="autolinking.html#testqdoc" translate="no">like this</a>, or <a href="testqdoc.html" translate="no">this</a>. Also,</p>
+<p>The string <a href="testqdoc.html" translate="no">TestQDoc</a> links to the C++ namespace unless linking explicitly, <a href="autolinking.html#testqdoc">like this</a>, or <a href="testqdoc.html" translate="no">this</a>. Also,</p>
<p>Autolinks:</p>
<ul>
<li><a href="testqdoc-testderived.html" translate="no">TestQDoc::TestDerived</a></li>
@@ -27,7 +27,7 @@
<p>Explicit links:</p>
<ul>
<li><a href="testqdoc-testderived.html" translate="no">TestQDoc::TestDerived</a></li>
-<li><a href="obsolete-classes.html#testqdoc" translate="no">Obsolete Classes#TestQDoc</a></li>
+<li><a href="obsolete-classes.html#testqdoc">Obsolete Classes#TestQDoc</a></li>
</ul>
<h2 id="someprop">someProp</h2>
</div>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testcpp-module.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testcpp-module.html
index 77f0d130d..6ac7d9b42 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testcpp-module.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testcpp-module.html
@@ -53,7 +53,7 @@
<li><a href="testcpp-module.html#section" translate="no">section()</a></li>
<li><a href="testcpp-module.html#section" translate="no">section() is a section title</a></li>
<li><a href="testqdoc-test.html#Test" translate="no">open( parenthesis</a></li>
-<li><a href="https://en.cppreference.com/w/cpp/utility/move" translate="no">C++11 added std::move(T&amp;&amp; t)</a></li>
+<li><a href="https://en.cppreference.com/w/cpp/utility/move">C++11 added std::move(T&amp;&amp; t)</a></li>
</ul>
<h4 id="section">section()</h4>
</div>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-test.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-test.html
index b2eae64e4..93c164ae0 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-test.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-test.html
@@ -41,7 +41,7 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr>
<li><a href="testqdoc-test-obsolete.html">Deprecated members</a></li>
<li>Test is part of <a href="cpptypes.html">Test C++ Types</a>.</li>
</ul>
-<p><b>Note:</b> All functions in this class are <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" translate="no">reentrant</a> with the following exceptions:</p>
+<p><b>Note:</b> All functions in this class are <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</a> with the following exceptions:</p>
<ul>
<li><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a>(int i, bool b) const</li>
</ul>
@@ -143,7 +143,7 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr>
<!-- $$$someFunctionDefaultArg[overload1]$$$someFunctionDefaultArgintbool -->
<h3 class="fn" translate="no" id="someFunctionDefaultArg"><span class="type">void</span> Test::<span class="name">someFunctionDefaultArg</span>(<span class="type">int</span> <i>i</i>, <span class="type">bool</span> <i>b</i> = false) const</h3>
<p>Function that takes a parameter <i translate="no">i</i> and <i translate="no">b</i>.</p>
-<p><b>Warning:</b> This function is not <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command" translate="no">reentrant</a>.</p>
+<p><b>Warning:</b> This function is not <a href="https://doc.qt.io/qt/17-qdoc-commands-thread.html#reentrant-command">reentrant</a>.</p>
<!-- @@@someFunctionDefaultArg -->
<!-- $$$virtualFun[overload1]$$$virtualFun -->
<h3 class="fn" translate="no" id="virtualFun"><code class="details extra" translate="no">[virtual]</code> <span class="type">void</span> Test::<span class="name">virtualFun</span>()</h3>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocfileoutput-exhaustive.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocfileoutput-exhaustive.html
index ce9c0419f..4c707b186 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocfileoutput-exhaustive.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocfileoutput-exhaustive.html
@@ -7,8 +7,8 @@
<title>Exhaustive testing of QDoc commands | OutputFromQDocFiles</title>
</head>
<body>
-<li><a href="toc-test.html" translate="no">TOC</a></li>
-<li><a href="qdoctests-qdocfileoutput.html" translate="no">Testing QDoc output from .qdoc files</a></li>
+<li><a href="toc-test.html">TOC</a></li>
+<li><a href="qdoctests-qdocfileoutput.html">Testing QDoc output from .qdoc files</a></li>
<li>Exhaustive testing of QDoc commands</li>
<li id="buildversion">OutputFromQDocFiles - A test project for QDoc build artifacts</li>
<link rel="prev" href="qdoctests-qdocfileoutput.html" />
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocfileoutput-linking.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocfileoutput-linking.html
index 4b50d9ee2..137707017 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocfileoutput-linking.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocfileoutput-linking.html
@@ -7,7 +7,7 @@
<title>Testing QDoc's link command | OutputFromQDocFiles</title>
</head>
<body>
-<li><a href="toc-test.html" translate="no">TOC</a></li>
+<li><a href="toc-test.html">TOC</a></li>
<li>Testing QDoc's link command</li>
<li id="buildversion">OutputFromQDocFiles - A test project for QDoc build artifacts</li>
<link rel="prev" href="qdoctests-qdocfileoutput-exhaustive.html" />
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocfileoutput.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocfileoutput.html
index cbb55db2e..9b7578fc3 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocfileoutput.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/qdoctests-qdocfileoutput.html
@@ -7,7 +7,7 @@
<title>Testing QDoc output from .qdoc files | OutputFromQDocFiles</title>
</head>
<body>
-<li><a href="toc-test.html" translate="no">TOC</a></li>
+<li><a href="toc-test.html">TOC</a></li>
<li>Testing QDoc output from .qdoc files</li>
<li id="buildversion">OutputFromQDocFiles - A test project for QDoc build artifacts</li>
<link rel="next" href="qdoctests-qdocfileoutput-exhaustive.html" />
@@ -48,14 +48,14 @@
<h2 id="linking">Linking</h2>
<p>There are multiple ways to create hyperlinks to other topics:</p>
<ul>
-<li><a href="qdoctests-qdocfileoutput-linking.html" translate="no">Linking to a page title</a></li>
-<li><a href="qdoctests-qdocfileoutput-linking.html#link-targets" translate="no">Linking to a section title</a></li>
-<li><a href="qdoctests-qdocfileoutput-linking.html#link-test-target" translate="no">Linking using a \target string</a></li>
-<li><a href="qdoctests-qdocfileoutput-linking.html" translate="no">Linking using a \keyword string</a></li>
+<li><a href="qdoctests-qdocfileoutput-linking.html">Linking to a page title</a></li>
+<li><a href="qdoctests-qdocfileoutput-linking.html#link-targets">Linking to a section title</a></li>
+<li><a href="qdoctests-qdocfileoutput-linking.html#link-test-target">Linking using a \target string</a></li>
+<li><a href="qdoctests-qdocfileoutput-linking.html">Linking using a \keyword string</a></li>
</ul>
<h2 id="qdoc-linking-test">QDoc Linking Test</h2>
<p>This section title is overridden by another target which takes precedence.</p>
-<h2 id="linking-to-something-in-a-section-title">Linking to <a href="qdoctests-qdocfileoutput.html#further-information" translate="no">something</a> in a section title</h2>
+<h2 id="linking-to-something-in-a-section-title">Linking to <a href="qdoctests-qdocfileoutput.html#further-information">something</a> in a section title</h2>
<p>This is allowed but a questionable practice.</p>
<details>
<summary>QDoc details</summary>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/toc-test.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/toc-test.html
index 519109bc9..08ec52c10 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/toc-test.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/toc-test.html
@@ -12,17 +12,17 @@
<!-- $$$toc-test.html-description -->
<div class="descr" id="details">
<ul>
-<li><a href="qdoctests-qdocfileoutput.html" translate="no">QDoc Testing</a><ul>
-<li><a href="qdoctests-qdocfileoutput-exhaustive.html" translate="no">Exhaustive testing of QDoc commands</a></li>
+<li><a href="qdoctests-qdocfileoutput.html">QDoc Testing</a><ul>
+<li><a href="qdoctests-qdocfileoutput-exhaustive.html">Exhaustive testing of QDoc commands</a></li>
</ul>
</li>
<li>Linking<ul>
-<li><a href="qdoctests-qdocfileoutput-linking.html" translate="no">QDoc Linking Test</a><ul>
-<li><a href="qdoctests-qdocfileoutput-linking.html#link-targets" translate="no">Link targets</a></li>
+<li><a href="qdoctests-qdocfileoutput-linking.html">QDoc Linking Test</a><ul>
+<li><a href="qdoctests-qdocfileoutput-linking.html#link-targets">Link targets</a></li>
</ul>
</li>
-<li><a href="crash.html" translate="no">Random page</a></li>
-<li><a href="toc.html" translate="no">Table of Contents</a></li>
+<li><a href="crash.html">Random page</a></li>
+<li><a href="toc.html">Table of Contents</a></li>
</ul>
</li>
</ul>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/toc.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/toc.html
index d6f423f49..d7220d013 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/toc.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/tocnavigation/expected/html/toc.html
@@ -6,7 +6,7 @@
<title>Table of Contents | OutputFromQDocFiles</title>
</head>
<body>
-<li><a href="toc-test.html" translate="no">TOC</a></li>
+<li><a href="toc-test.html">TOC</a></li>
<li>Table of Contents</li>
<li id="buildversion">OutputFromQDocFiles - A test project for QDoc build artifacts</li>
<link rel="prev" href="" />
@@ -18,9 +18,9 @@
<!-- $$$toc.html-description -->
<div class="descr" id="details">
<ul>
-<li><a href="qdoctests-qdocfileoutput.html" translate="no">QDoc Testing</a></li>
-<li><a href="qdoctests-qdocfileoutput-linking.html" translate="no">QDoc Linking Test</a></li>
-<li><a href="toc.html" translate="no">Table of Contents</a></li>
+<li><a href="qdoctests-qdocfileoutput.html">QDoc Testing</a></li>
+<li><a href="qdoctests-qdocfileoutput-linking.html">QDoc Linking Test</a></li>
+<li><a href="toc.html">Table of Contents</a></li>
</ul>
</div>
<!-- @@@toc.html -->
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/docbook/trademark-test.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/docbook/trademark-test.xml
new file mode 100644
index 000000000..6068ed67c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/docbook/trademark-test.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.2" xml:lang="en">
+<db:info>
+<db:title>Testing the \tm command</db:title>
+<db:productname>TrademarkCommand</db:productname>
+<db:titleabbrev>TrademarkCommand Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>TrademarkCommand Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:para>Acme™ is a trademark.</db:para>
+<db:section xml:id="acme-corp">
+<db:title> Acme corp</db:title>
+<db:para>Acme, the Acme Anvil™, and `It Rings Like a Bell!`™ are trademarks of the <db:emphasis>Acme corp</db:emphasis>.</db:para>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/docbook/trademarks.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/docbook/trademarks.xml
new file mode 100644
index 000000000..83369d0b6
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/docbook/trademarks.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.2" xml:lang="en">
+<db:info>
+<db:title>Trademarks</db:title>
+<db:productname>TrademarkCommand</db:productname>
+<db:titleabbrev>TrademarkCommand Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>A page that documents trademarks.</db:para>
+</db:abstract>
+</db:info>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="trademark-test.xml#acme-corp">Acme corp</db:link>.</db:para>
+</db:listitem>
+</db:itemizedlist>
+<db:para>Foo™ should have the trademark symbol but no link as we're already on the correct page.</db:para>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/html/trademark-test.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/html/trademark-test.html
new file mode 100644
index 000000000..4389c95b2
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/html/trademark-test.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- test.qdoc -->
+ <title>Testing the \tm command | TrademarkCommand</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#acme-corp"> Acme corp</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Testing the \tm command</h1>
+<!-- $$$trademark-test.html-description -->
+<div class="descr" id="details">
+<p>Acme<a href="trademarks.html">&#8482;</a> is a trademark.</p>
+<h2 id="acme-corp"> Acme corp</h2>
+<p>Acme, the Acme Anvil<a href="trademarks.html">&#8482;</a>, and `It Rings Like a Bell!`<a href="trademarks.html">&#8482;</a> are trademarks of the <i>Acme corp</i>.</p>
+</div>
+<!-- @@@trademark-test.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/html/trademarkcommand.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/html/trademarkcommand.index
new file mode 100644
index 000000000..9b0fe807a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/html/trademarkcommand.index
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="TrademarkCommand Reference Documentation" version="" project="TrademarkCommand">
+ <namespace name="" status="active" access="public" module="trademarkcommand">
+ <page name="trademark-test.html" href="trademark-test.html" status="active" location="test.qdoc" documented="true" subtype="page" title="Testing the \tm command" fulltitle="Testing the \tm command" subtitle="">
+ <contents name="acme-corp" title=" Acme corp" level="1"/>
+ </page>
+ <page name="trademarks.html" href="trademarks.html" status="active" location="test.qdoc" documented="true" subtype="page" title="Trademarks" fulltitle="Trademarks" subtitle="" brief="A page that documents trademarks">
+ <keyword name="trademark"/>
+ </page>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/html/trademarks.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/html/trademarks.html
new file mode 100644
index 000000000..475d760ed
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/html/trademarks.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- test.qdoc -->
+ <meta name="description" content="A page that documents trademarks.">
+ <title>Trademarks | TrademarkCommand</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Trademarks</h1>
+<!-- $$$trademarks.html-description -->
+<div class="descr" id="details">
+<ul>
+<li><a href="trademark-test.html#acme-corp">Acme corp</a>.</li>
+</ul>
+<p>Foo&#8482; should have the trademark symbol but no link as we're already on the correct page.</p>
+</div>
+<!-- @@@trademarks.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/webxml/trademark-test.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/webxml/trademark-test.webxml
new file mode 100644
index 000000000..09f1c5a94
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/webxml/trademark-test.webxml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="trademark-test.html" href="trademark-test.html" status="active" location="test.qdoc" documented="true" subtype="page" title="Testing the \tm command" fulltitle="Testing the \tm command" subtitle="">
+ <contents name="acme-corp" title=" Acme corp" level="1"/>
+ <description>
+ <para>Acme™ is a trademark.</para>
+ <section id="acme-corp">
+ <heading level="1"> Acme corp</heading>
+ <para>Acme, the Acme Anvil™, and `It Rings Like a Bell!`™ are trademarks of the <italic>Acme corp</italic>.</para>
+ </section>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/webxml/trademarkcommand.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/webxml/trademarkcommand.index
new file mode 100644
index 000000000..9b0fe807a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/webxml/trademarkcommand.index
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="TrademarkCommand Reference Documentation" version="" project="TrademarkCommand">
+ <namespace name="" status="active" access="public" module="trademarkcommand">
+ <page name="trademark-test.html" href="trademark-test.html" status="active" location="test.qdoc" documented="true" subtype="page" title="Testing the \tm command" fulltitle="Testing the \tm command" subtitle="">
+ <contents name="acme-corp" title=" Acme corp" level="1"/>
+ </page>
+ <page name="trademarks.html" href="trademarks.html" status="active" location="test.qdoc" documented="true" subtype="page" title="Trademarks" fulltitle="Trademarks" subtitle="" brief="A page that documents trademarks">
+ <keyword name="trademark"/>
+ </page>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/webxml/trademarks.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/webxml/trademarks.webxml
new file mode 100644
index 000000000..2e96e596f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/webxml/trademarks.webxml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="trademarks.html" href="trademarks.html" status="active" location="test.qdoc" documented="true" subtype="page" title="Trademarks" fulltitle="Trademarks" subtitle="" brief="A page that documents trademarks">
+ <keyword name="trademark"/>
+ <description>
+ <brief>A page that documents trademarks.</brief>
+ <list type="bullet">
+ <item>
+ <para>
+ <link raw="Acme corp" href="trademark-test.html#acme-corp" type="page" page="Testing the \tm command">Acme corp</link>.</para>
+ </item>
+ </list>
+ <para>Foo™ should have the trademark symbol but no link as we're already on the correct page.</para>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/src/test.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/src/test.qdoc
new file mode 100644
index 000000000..d7dc82113
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/src/test.qdoc
@@ -0,0 +1,28 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+/*!
+ \page trademark-test.html
+ \title Testing the \\tm command
+
+ \tm {Acme} is a trademark.
+
+ \section1 \tm Acme corp
+
+ \tm Acme, the \tm {Acme Anvil}, and \tm {`It Rings Like a Bell!`}
+ are trademarks of the \e {Acme corp}.
+*/
+
+/*!
+ \page trademarks.html
+ \title Trademarks
+ \keyword trademark
+ \brief A page that documents trademarks.
+
+ \list
+ \li \l {Acme corp}.
+ \endlist
+
+ \tm Foo should have the trademark symbol but no link as we're
+ already on the correct page.
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/trademark_command.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/trademark_command.qdocconf
new file mode 100644
index 000000000..2cc58eec0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/trademark_command.qdocconf
@@ -0,0 +1,17 @@
+project = TrademarkCommand
+
+{sourcedirs,headerdirs} = ./src
+
+navigation.trademarkspage = Trademarks
+
+locationinfo = false
+warninglimit = 0
+warninglimit.enabled = true
+
+outputformats = WebXML HTML DocBook
+{WebXML.nosubdirs,HTML.nosubdirs,DocBook.nosubdirs} = true
+WebXML.quotinginformation = true
+
+WebXML.outputsubdir = webxml
+HTML.outputsubdir = html
+DocBook.outputsubdir = docbook
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/html/trailingbackslashes.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/html/trailingbackslashes.index
index f9e9c4ff0..be2edeaf0 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/html/trailingbackslashes.index
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/html/trailingbackslashes.index
@@ -3,9 +3,15 @@
<INDEX url="" title="TrailingBackslashes Reference Documentation" version="" project="TrailingBackslashes">
<namespace name="" status="active" access="public" module="trailingbackslashes">
<struct name="Struct" href="struct.html" status="active" access="public" location="trailing_backslashes.h" documented="true" module="TrailingBackslashes">
- <function name="MultipleTrailingSlashes" fullname="Struct::MultipleTrailingSlashes" href="struct.html#MultipleTrailingSlashes" status="active" access="public" location="trailing_backslashes.h" documented="true" meta="plain" type="void" signature="void MultipleTrailingSlashes()"/>
- <function name="multipleTrailingSlashesAndRandomWhitespace" fullname="Struct::multipleTrailingSlashesAndRandomWhitespace" href="struct.html#multipleTrailingSlashesAndRandomWhitespace" status="active" access="public" location="trailing_backslashes.h" documented="true" meta="plain" type="void" signature="void multipleTrailingSlashesAndRandomWhitespace()"/>
- <function name="oneTrailingSlash" fullname="Struct::oneTrailingSlash" href="struct.html#oneTrailingSlash" status="active" access="public" location="trailing_backslashes.h" documented="true" meta="plain" type="void" signature="void oneTrailingSlash()"/>
+ <function name="MultipleTrailingSlashes" fullname="Struct::MultipleTrailingSlashes" href="struct.html#MultipleTrailingSlashes" status="active" access="public" location="trailing_backslashes.h" documented="true" meta="plain" type="void" signature="void MultipleTrailingSlashes()">
+ <keyword name="two-slashes-here" title="two slashes here"/>
+ </function>
+ <function name="multipleTrailingSlashesAndRandomWhitespace" fullname="Struct::multipleTrailingSlashesAndRandomWhitespace" href="struct.html#multipleTrailingSlashesAndRandomWhitespace" status="active" access="public" location="trailing_backslashes.h" documented="true" meta="plain" type="void" signature="void multipleTrailingSlashesAndRandomWhitespace()">
+ <keyword name="two-slashes-again" title="two slashes again"/>
+ </function>
+ <function name="oneTrailingSlash" fullname="Struct::oneTrailingSlash" href="struct.html#oneTrailingSlash" status="active" access="public" location="trailing_backslashes.h" documented="true" meta="plain" type="void" signature="void oneTrailingSlash()">
+ <keyword name="one-slash" title="one slash"/>
+ </function>
</struct>
<module name="TrailingBackslashes" href="trailingbackslashes-module.html" status="internal" seen="false" title=""/>
</namespace>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/webxml/struct.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/webxml/struct.webxml
index 86f6fcd59..85a7a1f28 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/webxml/struct.webxml
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/webxml/struct.webxml
@@ -4,6 +4,7 @@
<struct name="Struct" href="struct.html" status="active" access="public" location="trailing_backslashes.h" documented="true" module="TrailingBackslashes">
<description/>
<function name="MultipleTrailingSlashes" fullname="Struct::MultipleTrailingSlashes" href="struct.html#MultipleTrailingSlashes" status="active" access="public" location="trailing_backslashes.h" documented="true" meta="plain" type="void" signature="void MultipleTrailingSlashes()">
+ <keyword name="two-slashes-here" title="two slashes here"/>
<description>
<see-also>
<link raw="one slash" href="struct.html#oneTrailingSlash" type="function">one slash</link>
@@ -11,6 +12,7 @@
</description>
</function>
<function name="multipleTrailingSlashesAndRandomWhitespace" fullname="Struct::multipleTrailingSlashesAndRandomWhitespace" href="struct.html#multipleTrailingSlashesAndRandomWhitespace" status="active" access="public" location="trailing_backslashes.h" documented="true" meta="plain" type="void" signature="void multipleTrailingSlashesAndRandomWhitespace()">
+ <keyword name="two-slashes-again" title="two slashes again"/>
<description>
<see-also>
<link raw="two slashes here" href="struct.html#MultipleTrailingSlashes" type="function">two slashes here</link>
@@ -18,6 +20,7 @@
</description>
</function>
<function name="oneTrailingSlash" fullname="Struct::oneTrailingSlash" href="struct.html#oneTrailingSlash" status="active" access="public" location="trailing_backslashes.h" documented="true" meta="plain" type="void" signature="void oneTrailingSlash()">
+ <keyword name="one-slash" title="one slash"/>
<description>
<see-also>
<link raw="two slashes again" href="struct.html#multipleTrailingSlashesAndRandomWhitespace" type="function">two slashes again</link>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/webxml/trailingbackslashes.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/webxml/trailingbackslashes.index
index f9e9c4ff0..be2edeaf0 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/webxml/trailingbackslashes.index
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trailing_backslashes/expected/webxml/trailingbackslashes.index
@@ -3,9 +3,15 @@
<INDEX url="" title="TrailingBackslashes Reference Documentation" version="" project="TrailingBackslashes">
<namespace name="" status="active" access="public" module="trailingbackslashes">
<struct name="Struct" href="struct.html" status="active" access="public" location="trailing_backslashes.h" documented="true" module="TrailingBackslashes">
- <function name="MultipleTrailingSlashes" fullname="Struct::MultipleTrailingSlashes" href="struct.html#MultipleTrailingSlashes" status="active" access="public" location="trailing_backslashes.h" documented="true" meta="plain" type="void" signature="void MultipleTrailingSlashes()"/>
- <function name="multipleTrailingSlashesAndRandomWhitespace" fullname="Struct::multipleTrailingSlashesAndRandomWhitespace" href="struct.html#multipleTrailingSlashesAndRandomWhitespace" status="active" access="public" location="trailing_backslashes.h" documented="true" meta="plain" type="void" signature="void multipleTrailingSlashesAndRandomWhitespace()"/>
- <function name="oneTrailingSlash" fullname="Struct::oneTrailingSlash" href="struct.html#oneTrailingSlash" status="active" access="public" location="trailing_backslashes.h" documented="true" meta="plain" type="void" signature="void oneTrailingSlash()"/>
+ <function name="MultipleTrailingSlashes" fullname="Struct::MultipleTrailingSlashes" href="struct.html#MultipleTrailingSlashes" status="active" access="public" location="trailing_backslashes.h" documented="true" meta="plain" type="void" signature="void MultipleTrailingSlashes()">
+ <keyword name="two-slashes-here" title="two slashes here"/>
+ </function>
+ <function name="multipleTrailingSlashesAndRandomWhitespace" fullname="Struct::multipleTrailingSlashesAndRandomWhitespace" href="struct.html#multipleTrailingSlashesAndRandomWhitespace" status="active" access="public" location="trailing_backslashes.h" documented="true" meta="plain" type="void" signature="void multipleTrailingSlashesAndRandomWhitespace()">
+ <keyword name="two-slashes-again" title="two slashes again"/>
+ </function>
+ <function name="oneTrailingSlash" fullname="Struct::oneTrailingSlash" href="struct.html#oneTrailingSlash" status="active" access="public" location="trailing_backslashes.h" documented="true" meta="plain" type="void" signature="void oneTrailingSlash()">
+ <keyword name="one-slash" title="one slash"/>
+ </function>
</struct>
<module name="TrailingBackslashes" href="trailingbackslashes-module.html" status="internal" seen="false" title=""/>
</namespace>
diff --git a/tests/auto/linguist/lupdate/tst_lupdate.cpp b/tests/auto/linguist/lupdate/tst_lupdate.cpp
index 9f3d57595..e850a63dc 100644
--- a/tests/auto/linguist/lupdate/tst_lupdate.cpp
+++ b/tests/auto/linguist/lupdate/tst_lupdate.cpp
@@ -312,7 +312,7 @@ void tst_lupdate::good()
const QString command = m_cmdLupdate + ' ' + lupdateArguments.join(' ');
proc.start(m_cmdLupdate, lupdateArguments, QIODevice::ReadWrite | QIODevice::Text);
QVERIFY2(proc.waitForStarted(), qPrintable(command + QLatin1String(" :") + proc.errorString()));
- QVERIFY2(proc.waitForFinished(30000), qPrintable(command));
+ QVERIFY2(proc.waitForFinished(60000), qPrintable(command));
const QString output = QString::fromLocal8Bit(proc.readAll());
QVERIFY2(proc.exitStatus() == QProcess::NormalExit,
qPrintable(QLatin1Char('"') + command + "\" crashed\n" + output));