summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/assistant/CMakeLists.txt1
-rw-r--r--src/assistant/assistant/mainwindow.cpp4
-rw-r--r--src/assistant/help/CMakeLists.txt1
-rw-r--r--src/assistant/help/qhelpcontentwidget.cpp4
-rw-r--r--src/assistant/help/qhelpenginecore.cpp14
-rw-r--r--src/assistant/help/qhelpenginecore.h8
-rw-r--r--src/assistant/help/qhelpindexwidget.cpp4
-rw-r--r--src/assistant/help/qhelplink.h1
-rw-r--r--src/assistant/help/qhelpsearchenginecore.h2
-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
m---------src/assistant/qlitehtml0
-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.cpp23
-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/designer/versiondialog.cpp5
-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/distancefieldgenerator/mainwindow.cpp5
-rw-r--r--src/linguist/CMakeLists.txt3
-rw-r--r--src/linguist/Qt6LinguistToolsMacros.cmake8
-rw-r--r--src/linguist/linguist/CMakeLists.txt5
-rw-r--r--src/linguist/linguist/doc/src/linguist-manual.qdoc4
-rw-r--r--src/linguist/shared/translator.cpp12
-rw-r--r--src/qdbus/qdbusviewer/mainwindow.cpp4
-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-markupcmds.qdoc62
-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.cpp26
-rw-r--r--src/qdoc/qdoc/src/qdoc/atom.h3
-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/doc.cpp6
-rw-r--r--src/qdoc/qdoc/src/qdoc/doc.h1
-rw-r--r--src/qdoc/qdoc/src/qdoc/docbookgenerator.cpp123
-rw-r--r--src/qdoc/qdoc/src/qdoc/docbookgenerator.h6
-rw-r--r--src/qdoc/qdoc/src/qdoc/docparser.cpp120
-rw-r--r--src/qdoc/qdoc/src/qdoc/docparser.h13
-rw-r--r--src/qdoc/qdoc/src/qdoc/generator.cpp106
-rw-r--r--src/qdoc/qdoc/src/qdoc/generator.h7
-rw-r--r--src/qdoc/qdoc/src/qdoc/htmlgenerator.cpp166
-rw-r--r--src/qdoc/qdoc/src/qdoc/htmlgenerator.h14
-rw-r--r--src/qdoc/qdoc/src/qdoc/node.cpp29
-rw-r--r--src/qdoc/qdoc/src/qdoc/node.h3
-rw-r--r--src/qdoc/qdoc/src/qdoc/qdocindexfiles.cpp86
-rw-r--r--src/qdoc/qdoc/src/qdoc/qdocindexfiles.h1
-rw-r--r--src/qdoc/qdoc/src/qdoc/tree.cpp10
-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/compiler_generated_member_functions/compiler_generated_member_functions.qdocconf23
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/docbook/qdoctests-compilergeneratedmemberfunctions.xml39
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/docbook/qdoctests-module.xml38
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/docbook/qdoctests.xml30
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/html/compiler-generated-member-functions.index18
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/html/qdoctests-compilergeneratedmemberfunctions-members.html20
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/html/qdoctests-compilergeneratedmemberfunctions.html59
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/html/qdoctests-module.html38
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/html/qdoctests.html43
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/webxml/compiler-generated-member-functions.index18
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/webxml/qdoctests-compilergeneratedmemberfunctions.webxml28
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/webxml/qdoctests-module.webxml4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/webxml/qdoctests.webxml34
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/src/compilergeneratedmemberfunctions.cpp45
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/src/compilergeneratedmemberfunctions.h20
-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.xml24
-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/test.index4
-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.html14
-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/expected/webxml/test.index4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testqdoc-test.webxml8
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testqdoc.webxml8
-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.cpp4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/testcpp.h5
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/customsortedlists.qdocconf16
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/docbook/a.xml11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/docbook/b.xml11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/docbook/c.xml11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/docbook/d.xml11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/docbook/lists.xml102
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/a.html17
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/b.html17
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/c.html17
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/customsortedlists.index17
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/d.html17
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/lists.html54
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/a.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/b.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/c.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/customsortedlists.index17
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/d.webxml10
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/lists.webxml111
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/src/test.qdoc46
-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/docbook/cpptypes.xml3
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/testcpp-module.xml6
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/testqdoc-test.xml8
-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/cpptypes.html1
-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/testcpp.index4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-test-members.html2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-test.html14
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-testderived-members.html3
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testcpp.index4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testqdoc-test.webxml11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testqdoc.webxml11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/testcpp.cpp16
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/testcpp.h2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/cpptypes.xml3
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testcpp-module.xml6
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testqdoc-test.xml8
-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/cpptypes.html1
-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-members.html2
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-test.html14
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-testderived-members.html1
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testtemplate.index4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc-test.webxml11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc.webxml11
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testtemplate.index4
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/testcpp.cpp16
-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.xml19
-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.html23
-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.webxml20
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/src/test.qdoc32
-rw-r--r--src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/trademark_command.qdocconf20
-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--src/qdoc/qdoc/tests/validateqdocoutputfiles/tst_validateqdocoutputfiles.cpp19
-rw-r--r--src/shared/qtpropertybrowser/qttreepropertybrowser.cpp2
237 files changed, 3296 insertions, 694 deletions
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/assistant/mainwindow.cpp b/src/assistant/assistant/mainwindow.cpp
index 5a6d35e20..727d83404 100644
--- a/src/assistant/assistant/mainwindow.cpp
+++ b/src/assistant/assistant/mainwindow.cpp
@@ -856,8 +856,8 @@ void MainWindow::showAboutDialog()
"<h3>%1</h3>"
"<p>Version %2</p>"
"<p>Browser: %3</p></center>"
- "<p>Copyright (C) %4 The Qt Company Ltd.</p>")
- .arg(tr("Qt Assistant"), QLatin1StringView(QT_VERSION_STR), browser, QString()),
+ "<p>Copyright (C) The Qt Company Ltd. and other contributors.</p>")
+ .arg(tr("Qt Assistant"), QLatin1String(QT_VERSION_STR), browser),
resources);
aboutDia.setPixmap(QString(":/qt-project.org/assistant/images/assistant-128.png"_L1));
}
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/help/qhelpcontentwidget.cpp b/src/assistant/help/qhelpcontentwidget.cpp
index d08b8c7c1..24837611d 100644
--- a/src/assistant/help/qhelpcontentwidget.cpp
+++ b/src/assistant/help/qhelpcontentwidget.cpp
@@ -119,7 +119,7 @@ QHelpContentModel::~QHelpContentModel()
void QHelpContentModel::createContentsForCurrentFilter()
{
#if QT_CONFIG(future)
- d->createContents([this] { return d->helpEngine->provideContentForCurrentFilter(); });
+ d->createContents([this] { return d->helpEngine->requestContentForCurrentFilter(); });
#endif
}
@@ -130,7 +130,7 @@ void QHelpContentModel::createContentsForCurrentFilter()
void QHelpContentModel::createContents(const QString &filter)
{
#if QT_CONFIG(future)
- d->createContents([this, filter] { return d->helpEngine->provideContent(filter); });
+ d->createContents([this, filter] { return d->helpEngine->requestContent(filter); });
#endif
}
diff --git a/src/assistant/help/qhelpenginecore.cpp b/src/assistant/help/qhelpenginecore.cpp
index de44e5701..f4be7c5cf 100644
--- a/src/assistant/help/qhelpenginecore.cpp
+++ b/src/assistant/help/qhelpenginecore.cpp
@@ -799,7 +799,7 @@ QHelpContentItem *createContentItem(const QString &name = {}, const QUrl &link =
return new QHelpContentItem(name, link, parent);
}
-static void provideContentHelper(QPromise<ContentResult> &promise, const ContentProvider &provider,
+static void requestContentHelper(QPromise<ContentResult> &promise, const ContentProvider &provider,
const QString &collectionFile)
{
ContentResult rootItem(createContentItem());
@@ -883,20 +883,20 @@ static ContentProvider contentProviderFromAttributes(const QStringList &attribut
};
}
-QFuture<ContentResult> QHelpEngineCore::provideContentForCurrentFilter() const
+QFuture<ContentResult> QHelpEngineCore::requestContentForCurrentFilter() const
{
const ContentProvider provider = usesFilterEngine()
? contentProviderFromFilterEngine(filterEngine()->activeFilter())
: contentProviderFromAttributes(filterAttributes(d->currentFilter));
- return QtConcurrent::run(provideContentHelper, provider, collectionFile());
+ return QtConcurrent::run(requestContentHelper, provider, collectionFile());
}
-QFuture<ContentResult> QHelpEngineCore::provideContent(const QString &filter) const
+QFuture<ContentResult> QHelpEngineCore::requestContent(const QString &filter) const
{
const ContentProvider provider = usesFilterEngine()
? contentProviderFromFilterEngine(filter)
: contentProviderFromAttributes(filterAttributes(filter));
- return QtConcurrent::run(provideContentHelper, provider, collectionFile());
+ return QtConcurrent::run(requestContentHelper, provider, collectionFile());
}
using IndexProvider = std::function<QStringList(const QString &)>;
@@ -922,7 +922,7 @@ static IndexProvider indexProviderFromAttributes(const QStringList &attributes)
};
}
-QFuture<IndexResult> QHelpEngineCore::provideIndexForCurrentFilter() const
+QFuture<IndexResult> QHelpEngineCore::requestIndexForCurrentFilter() const
{
const IndexProvider provider = usesFilterEngine()
? indexProviderFromFilterEngine(filterEngine()->activeFilter())
@@ -930,7 +930,7 @@ QFuture<IndexResult> QHelpEngineCore::provideIndexForCurrentFilter() const
return QtConcurrent::run(std::move(provider), collectionFile());
}
-QFuture<IndexResult> QHelpEngineCore::provideIndex(const QString &filter) const
+QFuture<IndexResult> QHelpEngineCore::requestIndex(const QString &filter) const
{
const IndexProvider provider = usesFilterEngine()
? indexProviderFromFilterEngine(filter)
diff --git a/src/assistant/help/qhelpenginecore.h b/src/assistant/help/qhelpenginecore.h
index aa0828f81..8d3861dd4 100644
--- a/src/assistant/help/qhelpenginecore.h
+++ b/src/assistant/help/qhelpenginecore.h
@@ -95,11 +95,11 @@ public:
bool usesFilterEngine() const;
#if QT_CONFIG(future)
- QFuture<std::shared_ptr<QHelpContentItem>> provideContentForCurrentFilter() const;
- QFuture<std::shared_ptr<QHelpContentItem>> provideContent(const QString &filter) const;
+ QFuture<std::shared_ptr<QHelpContentItem>> requestContentForCurrentFilter() const;
+ QFuture<std::shared_ptr<QHelpContentItem>> requestContent(const QString &filter) const;
- QFuture<QStringList> provideIndexForCurrentFilter() const;
- QFuture<QStringList> provideIndex(const QString &filter) const;
+ QFuture<QStringList> requestIndexForCurrentFilter() const;
+ QFuture<QStringList> requestIndex(const QString &filter) const;
#endif
Q_SIGNALS:
diff --git a/src/assistant/help/qhelpindexwidget.cpp b/src/assistant/help/qhelpindexwidget.cpp
index bd330de26..39fc9f94c 100644
--- a/src/assistant/help/qhelpindexwidget.cpp
+++ b/src/assistant/help/qhelpindexwidget.cpp
@@ -106,7 +106,7 @@ QHelpIndexModel::~QHelpIndexModel()
void QHelpIndexModel::createIndexForCurrentFilter()
{
#if QT_CONFIG(future)
- d->createIndex([this] { return d->helpEngine->provideIndexForCurrentFilter(); });
+ d->createIndex([this] { return d->helpEngine->requestIndexForCurrentFilter(); });
#endif
}
@@ -117,7 +117,7 @@ void QHelpIndexModel::createIndexForCurrentFilter()
void QHelpIndexModel::createIndex(const QString &filter)
{
#if QT_CONFIG(future)
- d->createIndex([this, filter] { return d->helpEngine->provideIndex(filter); });
+ d->createIndex([this, filter] { return d->helpEngine->requestIndex(filter); });
#endif
}
diff --git a/src/assistant/help/qhelplink.h b/src/assistant/help/qhelplink.h
index 5c359188e..831c4a3dd 100644
--- a/src/assistant/help/qhelplink.h
+++ b/src/assistant/help/qhelplink.h
@@ -10,7 +10,6 @@
QT_BEGIN_NAMESPACE
-// TODO: Qt 7.0 - pimpl or replace with std::pair? Replace struct with class.
struct QHELP_EXPORT QHelpLink final
{
QUrl url;
diff --git a/src/assistant/help/qhelpsearchenginecore.h b/src/assistant/help/qhelpsearchenginecore.h
index d820a8f3d..df4e4fabd 100644
--- a/src/assistant/help/qhelpsearchenginecore.h
+++ b/src/assistant/help/qhelpsearchenginecore.h
@@ -31,7 +31,7 @@ public:
void cancelIndexing();
void search(const QString &searchInput);
- void cancelSearching(); // TODO: is it needed?
+ void cancelSearching();
void scheduleIndexDocumentation();
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/assistant/qlitehtml b/src/assistant/qlitehtml
-Subproject 4f737256c0a698ff3ba380cbaef1ba80a16fc3a
+Subproject 479c1e5baac753a71e3edb9929654b7e5705cb0
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..a880cc512 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);
@@ -1888,13 +1894,13 @@ void DesignerPropertyManager::uninitializeProperty(QtProperty *property)
m_keySequenceManager.uninitialize(property);
if (QtProperty *iconTheme = m_propertyToTheme.value(property)) {
- delete iconTheme;
+ delete iconTheme; // Delete first (QTBUG-126182)
m_iconSubPropertyToProperty.remove(iconTheme);
}
if (QtProperty *iconThemeEnum = m_propertyToThemeEnum.value(property)) {
+ delete iconThemeEnum; // Delete first (QTBUG-126182)
m_iconSubPropertyToProperty.remove(iconThemeEnum);
- delete iconThemeEnum;
}
m_propertyToAlignH.remove(property);
@@ -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/designer/versiondialog.cpp b/src/designer/src/designer/versiondialog.cpp
index 7660de46c..c9a77e145 100644
--- a/src/designer/src/designer/versiondialog.cpp
+++ b/src/designer/src/designer/versiondialog.cpp
@@ -140,9 +140,8 @@ VersionDialog::VersionDialog(QWidget *parent)
version = version.arg(tr("Qt Widgets Designer")).arg(QLatin1StringView(QT_VERSION_STR));
version.append(tr("<br/>Qt Widgets Designer is a graphical user interface designer for Qt applications.<br/>"));
- lbl->setText(tr("%1"
- "<br/>Copyright (C) %2 The Qt Company Ltd."
- ).arg(version, QString()));
+ lbl->setText(
+ tr("%1<br/>Copyright (C) The Qt Company Ltd. and other contributors.").arg(version));
lbl->setWordWrap(true);
lbl->setOpenExternalLinks(true);
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/distancefieldgenerator/mainwindow.cpp b/src/distancefieldgenerator/mainwindow.cpp
index 703e73857..58b0a37a8 100644
--- a/src/distancefieldgenerator/mainwindow.cpp
+++ b/src/distancefieldgenerator/mainwindow.cpp
@@ -744,9 +744,8 @@ void MainWindow::about()
"<p>Version %1.<br/>"
"The Qt Distance Field Generator tool allows "
"to prepare a font cache for Qt applications.</p>"
- "<p>Copyright (C) %2 The Qt Company Ltd.</p>")
- .arg(QLatin1String(QT_VERSION_STR))
- .arg(QString()));
+ "<p>Copyright (C) The Qt Company Ltd. and other contributors.</p>")
+ .arg(QLatin1String(QT_VERSION_STR)));
msgBox->show();
}
diff --git a/src/linguist/CMakeLists.txt b/src/linguist/CMakeLists.txt
index ef28c0ff3..ee1196303 100644
--- a/src/linguist/CMakeLists.txt
+++ b/src/linguist/CMakeLists.txt
@@ -14,7 +14,8 @@ add_subdirectory(lrelease)
add_subdirectory(lrelease-pro)
add_subdirectory(lupdate)
add_subdirectory(lupdate-pro)
-if(QT_FEATURE_process AND QT_FEATURE_pushbutton AND QT_FEATURE_toolbutton AND TARGET Qt::Widgets AND NOT no-png)
+if(QT_FEATURE_process AND QT_FEATURE_pushbutton AND QT_FEATURE_toolbutton
+ AND QT_FEATURE_png AND QT_FEATURE_printsupport AND TARGET Qt::Widgets)
add_subdirectory(linguist)
endif()
diff --git a/src/linguist/Qt6LinguistToolsMacros.cmake b/src/linguist/Qt6LinguistToolsMacros.cmake
index 5e3baecc2..68c151034 100644
--- a/src/linguist/Qt6LinguistToolsMacros.cmake
+++ b/src/linguist/Qt6LinguistToolsMacros.cmake
@@ -648,6 +648,14 @@ function(qt6_add_translations)
endif()
endforeach()
+ # The project-level CMakeLists.txt might miss a call to find_package(Qt6 COMPONENTS Core
+ # LinguistTools). Then, subsequent function calls like qt_add_resources will fail. To
+ # remedy this, pull the packages in.
+ cmake_language(EVAL CODE
+ "cmake_language(DEFER
+ DIRECTORY \"${PROJECT_SOURCE_DIR}\"
+ CALL find_package Qt6 COMPONENTS Core LinguistTools)")
+
# Schedule this command to be called at the end of the project's source dir.
cmake_language(EVAL CODE
"cmake_language(DEFER
diff --git a/src/linguist/linguist/CMakeLists.txt b/src/linguist/linguist/CMakeLists.txt
index edb6e3ae6..45477df77 100644
--- a/src/linguist/linguist/CMakeLists.txt
+++ b/src/linguist/linguist/CMakeLists.txt
@@ -133,11 +133,6 @@ set_target_properties(linguist PROPERTIES
file(GLOB phrasebooks_files "${CMAKE_CURRENT_SOURCE_DIR}/../phrasebooks/*")
qt_install(FILES ${phrasebooks_files} DESTINATION "${INSTALL_DATADIR}/phrasebooks")
-qt_internal_extend_target(linguist CONDITION QT_PRODUCT___contains___OpenSource._x_
- DEFINES
- QT_OPENSOURCE
-)
-
if(WIN32)
set_target_properties(linguist PROPERTIES
QT_TARGET_RC_ICONS "${CMAKE_CURRENT_SOURCE_DIR}/linguist.ico"
diff --git a/src/linguist/linguist/doc/src/linguist-manual.qdoc b/src/linguist/linguist/doc/src/linguist-manual.qdoc
index 32caa80f2..cd08ebc50 100644
--- a/src/linguist/linguist/doc/src/linguist-manual.qdoc
+++ b/src/linguist/linguist/doc/src/linguist-manual.qdoc
@@ -582,6 +582,10 @@
installed Qt, you can start \QL in the same way as any other application on
the development host.
+ \note You can obtain an installer for \QL only (without the entire Qt SDK)
+ from \l {https://download.qt.io/linguist_releases/}. The installer is
+ available for Windows, and works with Qt 6.
+
To address issues that arise from the subtleties and complexities of
human language, translators and developers may need to:
diff --git a/src/linguist/shared/translator.cpp b/src/linguist/shared/translator.cpp
index 156208b3f..deaa62120 100644
--- a/src/linguist/shared/translator.cpp
+++ b/src/linguist/shared/translator.cpp
@@ -339,10 +339,14 @@ void Translator::languageAndTerritory(QStringView languageCode, QLocale::Languag
{
QLocale::Language language = QLocale::AnyLanguage;
QLocale::Territory territory = QLocale::AnyTerritory;
- const auto underScore = languageCode.indexOf(u'_'); // "de_DE"
- if (underScore != -1) {
- language = QLocale::codeToLanguage(languageCode.left(underScore));
- territory = QLocale::codeToTerritory(languageCode.mid(underScore + 1));
+ auto separator = languageCode.indexOf(u'_'); // "de_DE"
+ if (separator == -1) {
+ // compatibility with older .ts files
+ separator = languageCode.indexOf(u'-'); // "de-DE"
+ }
+ if (separator != -1) {
+ language = QLocale::codeToLanguage(languageCode.left(separator));
+ territory = QLocale::codeToTerritory(languageCode.mid(separator + 1));
} else {
language = QLocale::codeToLanguage(languageCode);
territory = QLocale(language).territory();
diff --git a/src/qdbus/qdbusviewer/mainwindow.cpp b/src/qdbus/qdbusviewer/mainwindow.cpp
index ef75dbeb7..14e1e8ffd 100644
--- a/src/qdbus/qdbusviewer/mainwindow.cpp
+++ b/src/qdbus/qdbusviewer/mainwindow.cpp
@@ -71,8 +71,8 @@ void MainWindow::about()
box.setText(tr("<center><img src=\":/qt-project.org/qdbusviewer/images/qdbusviewer-128.png\">"
"<h3>%1</h3>"
"<p>Version %2</p></center>"
- "<p>Copyright (C) %3 The Qt Company Ltd.</p>")
- .arg(tr("D-Bus Viewer"), QLatin1String(QT_VERSION_STR), QString()));
+ "<p>Copyright (C) The Qt Company Ltd. and other contributors.</p>")
+ .arg(tr("D-Bus Viewer"), QLatin1String(QT_VERSION_STR)));
box.setWindowTitle(tr("D-Bus Viewer"));
box.exec();
}
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-markupcmds.qdoc b/src/qdoc/qdoc/doc/qdoc-manual-markupcmds.qdoc
index bd31bdc07..3615d2399 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)
@@ -2478,6 +2502,11 @@
\e{draganddrop} group will have \e{\\ingroup draganddrop} in its
\e{\\class} or \e{\\qmltype} comment.
+ The group members are sorted in ascending order, based on
+ user-visible name or title. Since QDoc 6.9, \\annotatedlist
+ and \qdoccmd generatelist support also custom sorting.
+
+ See also \qdoccmd generatelist and \l {Sorting group members}.
\target qtcmakepackage-command
\section1 \\qtcmakepackage
@@ -2552,6 +2581,37 @@
With a group name as the only argument, QDoc lists all entities that
use the \c {\ingroup <group-name>} command.
+ \section3 Sorting group members
+
+ When generating a list of group members, they are sorted in ascending
+ order, based on user-visible name or title. Since QDoc 6.9, the default
+ sort order can be modified:
+
+ \badcode
+ \generatelist [descending] changelogs
+ \endcode
+
+ Assuming the \e changelogs group consists of pages
+ detailing changes in different versions, this generates the
+ list in descending order (newest version first).
+
+ \section4 Sort key
+
+ Since QDoc 6.9, a custom sort key can be assigned to one or
+ more group members using the \qdoccmd meta command:
+
+ \badcode
+ \meta sortkey {sort key}
+ \endcode
+
+ Sorting (ascending or descending) is then done based on
+ these key(s), rather than user-visible titles.
+
+ \note Any group member with a sort key is listed \e before
+ members without a key (in the default ascending order). This
+ allows raising individual group member(s) to the top of the
+ list.
+
\target table example
\section2 \c annotatedclasses
@@ -2760,6 +2820,8 @@
\ingroup qt-basic-concepts
\endcode
+ See also \qdoccmd {annotatedlist}.
+
\target if-command
\section1 \\if
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.cpp b/src/qdoc/qdoc/src/qdoc/atom.cpp
index 10f67696c..f887c4ec5 100644
--- a/src/qdoc/qdoc/src/qdoc/atom.cpp
+++ b/src/qdoc/qdoc/src/qdoc/atom.cpp
@@ -251,6 +251,32 @@ static const struct
\also string()
*/
+/*!
+ Starting from this Atom, searches the linked list for the
+ atom of specified type \a t and returns it. Returns \nullptr
+ if no such atom is found.
+*/
+const Atom *Atom::find(AtomType t) const
+{
+ const auto *a{this};
+ while (a && a->type() != t)
+ a = a->next();
+ return a;
+}
+
+/*!
+ Starting from this Atom, searches the linked list for the
+ atom of specified type \a t and string \a s, and returns it.
+ Returns \nullptr if no such atom is found.
+*/
+const Atom *Atom::find(AtomType t, const QString &s) const
+{
+ const auto *a{this};
+ while (a && (a->type() != t || a->string() != s))
+ a = a->next();
+ return a;
+}
+
/*! \fn Atom *Atom::next()
Return the next atom in the atom list.
\also type(), string()
diff --git a/src/qdoc/qdoc/src/qdoc/atom.h b/src/qdoc/qdoc/src/qdoc/atom.h
index dbfd0c4a9..7483c829e 100644
--- a/src/qdoc/qdoc/src/qdoc/atom.h
+++ b/src/qdoc/qdoc/src/qdoc/atom.h
@@ -141,6 +141,8 @@ public:
Atom *next() { return m_next; }
void setNext(Atom *newNext) { m_next = newNext; }
+ [[nodiscard]] const Atom *find(AtomType t) const;
+ [[nodiscard]] const Atom *find(AtomType t, const QString &s) const;
[[nodiscard]] const Atom *next() const { return m_next; }
[[nodiscard]] const Atom *next(AtomType t) const;
[[nodiscard]] const Atom *next(AtomType t, const QString &s) const;
@@ -203,6 +205,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/doc.cpp b/src/qdoc/qdoc/src/qdoc/doc.cpp
index c994dc807..4a2aa72fd 100644
--- a/src/qdoc/qdoc/src/qdoc/doc.cpp
+++ b/src/qdoc/qdoc/src/qdoc/doc.cpp
@@ -299,6 +299,12 @@ QMultiMap<ComparisonCategory, Text> *Doc::comparesWithMap() const
return m_priv && m_priv->extra ? &m_priv->extra->m_comparesWithMap : nullptr;
}
+void Doc::constructExtra() const
+{
+ if (m_priv)
+ m_priv->constructExtra();
+}
+
void Doc::initialize(FileResolver& file_resolver)
{
Config &config = Config::instance();
diff --git a/src/qdoc/qdoc/src/qdoc/doc.h b/src/qdoc/qdoc/src/qdoc/doc.h
index 50e88c72f..49a9f7947 100644
--- a/src/qdoc/qdoc/src/qdoc/doc.h
+++ b/src/qdoc/qdoc/src/qdoc/doc.h
@@ -73,6 +73,7 @@ public:
[[nodiscard]] const QList<Atom *> &targets() const;
[[nodiscard]] QStringMultiMap *metaTagMap() const;
[[nodiscard]] QMultiMap<ComparisonCategory, Text> *comparesWithMap() const;
+ void constructExtra() const;
static void initialize(FileResolver& file_resolver);
static void terminate();
diff --git a/src/qdoc/qdoc/src/qdoc/docbookgenerator.cpp b/src/qdoc/qdoc/src/qdoc/docbookgenerator.cpp
index 9e99b3b15..6ac83ff13 100644
--- a/src/qdoc/qdoc/src/qdoc/docbookgenerator.cpp
+++ b/src/qdoc/qdoc/src/qdoc/docbookgenerator.cpp
@@ -342,6 +342,12 @@ qsizetype DocBookGenerator::generateAtom(const Atom *atom, const Node *relative,
m_writer->writeStartElement(dbNamespace, "guilabel");
if (m_useITS)
m_writer->writeAttribute(itsNamespace, "translate", "no");
+ } else if (atom->string() == ATOM_FORMATTING_TRADEMARK) {
+ m_writer->writeStartElement(dbNamespace,
+ appendTrademark(atom->find(Atom::FormattingRight)) ?
+ "trademark" : "phrase");
+ if (m_useITS)
+ m_writer->writeAttribute(itsNamespace, "translate", "no");
} else {
relative->location().warning(QStringLiteral("Unsupported formatting: %1").arg(atom->string()));
}
@@ -353,7 +359,8 @@ qsizetype DocBookGenerator::generateAtom(const Atom *atom, const Node *relative,
|| atom->string() == ATOM_FORMATTING_SUPERSCRIPT
|| atom->string() == ATOM_FORMATTING_TELETYPE
|| atom->string() == ATOM_FORMATTING_PARAMETER
- || atom->string() == ATOM_FORMATTING_UICONTROL) {
+ || atom->string() == ATOM_FORMATTING_UICONTROL
+ || atom->string() == ATOM_FORMATTING_TRADEMARK) {
m_writer->writeEndElement();
} else if (atom->string() == ATOM_FORMATTING_LINK) {
if (atom->string() == ATOM_FORMATTING_TELETYPE)
@@ -363,11 +370,12 @@ qsizetype DocBookGenerator::generateAtom(const Atom *atom, const Node *relative,
relative->location().warning(QStringLiteral("Unsupported formatting: %1").arg(atom->string()));
}
break;
- case Atom::AnnotatedList:
+ case Atom::AnnotatedList: {
if (const CollectionNode *cn = m_qdb->getCollectionNode(atom->string(), Node::Group))
- generateList(cn, atom->string());
- break;
+ generateList(cn, atom->string(), Generator::sortOrder(atom->strings().last()));
+ } break;
case Atom::GeneratedList: {
+ const auto sortOrder{Generator::sortOrder(atom->strings().last())};
bool hasGeneratedSomething = false;
if (atom->string() == QLatin1String("annotatedclasses")
|| atom->string() == QLatin1String("attributions")
@@ -376,7 +384,7 @@ qsizetype DocBookGenerator::generateAtom(const Atom *atom, const Node *relative,
? m_qdb->getCppClasses()
: atom->string() == QLatin1String("attributions") ? m_qdb->getAttributions()
: m_qdb->getNamespaces();
- generateAnnotatedList(relative, things.values(), atom->string());
+ generateAnnotatedList(relative, things.values(), atom->string(), Auto, sortOrder);
hasGeneratedSomething = !things.isEmpty();
} else if (atom->string() == QLatin1String("annotatedexamples")
|| atom->string() == QLatin1String("annotatedattributions")) {
@@ -421,12 +429,12 @@ qsizetype DocBookGenerator::generateAtom(const Atom *atom, const Node *relative,
map = cn->getMembers(Node::QmlType); // qmltypesbymodule <module_name>
break;
default: // fall back to generating all members
- generateAnnotatedList(relative, cn->members(), atom->string());
+ generateAnnotatedList(relative, cn->members(), atom->string(), Auto, sortOrder);
hasGeneratedSomething = !cn->members().isEmpty();
break;
}
if (!map.isEmpty()) {
- generateAnnotatedList(relative, map.values(), atom->string());
+ generateAnnotatedList(relative, map.values(), atom->string(), Auto, sortOrder);
hasGeneratedSomething = true;
}
}
@@ -458,7 +466,7 @@ qsizetype DocBookGenerator::generateAtom(const Atom *atom, const Node *relative,
hasGeneratedSomething = true; // Approximation, because there is
// some nontrivial logic in generateList.
} else if (const auto *cn = m_qdb->getCollectionNode(atom->string(), Node::Group); cn) {
- generateAnnotatedList(cn, cn->members(), atom->string(), ItemizedList);
+ generateAnnotatedList(cn, cn->members(), atom->string(), ItemizedList, sortOrder);
hasGeneratedSomething = true; // Approximation
}
@@ -1289,7 +1297,8 @@ void DocBookGenerator::endLink()
m_linkNode = nullptr;
}
-void DocBookGenerator::generateList(const Node *relative, const QString &selector)
+void DocBookGenerator::generateList(const Node *relative, const QString &selector,
+ Qt::SortOrder sortOrder)
{
// From HtmlGenerator::generateList, without warnings, changing prototype.
CNMap cnm;
@@ -1308,7 +1317,7 @@ void DocBookGenerator::generateList(const Node *relative, const QString &selecto
nodeList.reserve(collectionList.size());
for (auto *collectionNode : collectionList)
nodeList.append(collectionNode);
- generateAnnotatedList(relative, nodeList, selector);
+ generateAnnotatedList(relative, nodeList, selector, Auto, sortOrder);
} else {
/*
\generatelist {selector} is only allowed in a comment where
@@ -1317,7 +1326,7 @@ void DocBookGenerator::generateList(const Node *relative, const QString &selecto
Node *n = const_cast<Node *>(relative);
auto *cn = static_cast<CollectionNode *>(n);
m_qdb->mergeCollections(cn);
- generateAnnotatedList(cn, cn->members(), selector);
+ generateAnnotatedList(cn, cn->members(), selector, Auto, sortOrder);
}
}
@@ -1326,7 +1335,8 @@ void DocBookGenerator::generateList(const Node *relative, const QString &selecto
A two-column table is output.
*/
void DocBookGenerator::generateAnnotatedList(const Node *relative, const NodeList &nodeList,
- const QString &selector, GeneratedListType type)
+ const QString &selector, GeneratedListType type,
+ Qt::SortOrder sortOrder)
{
if (nodeList.isEmpty())
return;
@@ -1356,7 +1366,10 @@ void DocBookGenerator::generateAnnotatedList(const Node *relative, const NodeLis
newLine();
NodeList members{nodeList};
- std::sort(members.begin(), members.end(), Node::nodeNameLessThan);
+ if (sortOrder == Qt::DescendingOrder)
+ std::sort(members.rbegin(), members.rend(), Node::nodeSortKeyOrNameLessThan);
+ else
+ std::sort(members.begin(), members.end(), Node::nodeSortKeyOrNameLessThan);
for (const auto &node : std::as_const(members)) {
if (node->isInternal() || node->isDeprecated())
continue;
@@ -1565,22 +1578,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 +2202,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 +2352,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 +3412,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 +3517,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/docbookgenerator.h b/src/qdoc/qdoc/src/qdoc/docbookgenerator.h
index 5defbeb82..6083fc34a 100644
--- a/src/qdoc/qdoc/src/qdoc/docbookgenerator.h
+++ b/src/qdoc/qdoc/src/qdoc/docbookgenerator.h
@@ -43,7 +43,8 @@ protected:
using Generator::generateProxyPage;
void generateProxyPage(Aggregate *aggregate);
- void generateList(const Node *relative, const QString &selector);
+ void generateList(const Node *relative, const QString &selector,
+ Qt::SortOrder sortOrder = Qt::AscendingOrder);
void generateHeader(const QString &title, const QString &subtitle, const Node *node);
void closeTextSections();
void generateFooter();
@@ -74,7 +75,8 @@ private:
void endDocument();
void generateAnnotatedList(const Node *relative, const NodeList &nodeList,
- const QString &selector, GeneratedListType type = Auto);
+ const QString &selector, GeneratedListType type = Auto,
+ Qt::SortOrder sortOrder = Qt::AscendingOrder);
void generateAnnotatedLists(const Node *relative, const NodeMultiMap &nmm,
const QString &selector);
void generateCompactList(const Node *relative, const NodeMultiMap &nmm, bool includeAlphabet,
diff --git a/src/qdoc/qdoc/src/qdoc/docparser.cpp b/src/qdoc/qdoc/src/qdoc/docparser.cpp
index b6304a960..3d78fe38a 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,
@@ -129,14 +130,15 @@ static struct
{
const char *name;
int no;
-} cmds[] = { { "a", CMD_A },
+ bool is_formatting_command { false };
+} cmds[] = { { "a", CMD_A, true },
{ "annotatedlist", CMD_ANNOTATEDLIST },
- { "b", CMD_B },
+ { "b", CMD_B, true },
{ "badcode", CMD_BADCODE },
- { "bold", CMD_BOLD },
+ { "bold", CMD_BOLD, true },
{ "br", CMD_BR },
{ "brief", CMD_BRIEF },
- { "c", CMD_C },
+ { "c", CMD_C, true },
{ "caption", CMD_CAPTION },
{ "code", CMD_CODE },
{ "codeline", CMD_CODELINE },
@@ -144,7 +146,7 @@ static struct
{ "details", CMD_DETAILS },
{ "div", CMD_DIV },
{ "dots", CMD_DOTS },
- { "e", CMD_E },
+ { "e", CMD_E, true },
{ "else", CMD_ELSE },
{ "endcode", CMD_ENDCODE },
{ "endcompareswith", CMD_ENDCOMPARESWITH },
@@ -169,7 +171,7 @@ static struct
{ "generatelist", CMD_GENERATELIST },
{ "header", CMD_HEADER },
{ "hr", CMD_HR },
- { "i", CMD_I },
+ { "i", CMD_I, true },
{ "if", CMD_IF },
{ "image", CMD_IMAGE },
{ "important", CMD_IMPORTANT },
@@ -209,14 +211,15 @@ static struct
{ "skipuntil", CMD_SKIPUNTIL },
{ "snippet", CMD_SNIPPET },
{ "span", CMD_SPAN },
- { "sub", CMD_SUB },
- { "sup", CMD_SUP },
+ { "sub", CMD_SUB, true },
+ { "sup", CMD_SUP, true },
{ "table", CMD_TABLE },
{ "tableofcontents", CMD_TABLEOFCONTENTS },
{ "target", CMD_TARGET },
- { "tt", CMD_TT },
- { "uicontrol", CMD_UICONTROL },
- { "underline", CMD_UNDERLINE },
+ { "tm", CMD_TM, true },
+ { "tt", CMD_TT, true },
+ { "uicontrol", CMD_UICONTROL, true },
+ { "underline", CMD_UNDERLINE, true },
{ "unicode", CMD_UNICODE },
{ "value", CMD_VALUE },
{ "warning", CMD_WARNING },
@@ -373,7 +376,7 @@ void DocParser::parse(const QString &source, DocPrivate *docPrivate,
break;
case CMD_C:
enterPara();
- p1 = untabifyEtc(getArgument(true));
+ p1 = untabifyEtc(getArgument(ArgumentParsingOptions::Verbatim));
marker = CodeMarker::markerForCode(p1);
appendAtom(Atom(Atom::C, marker->markedUpCode(p1, nullptr, location())));
break;
@@ -403,7 +406,7 @@ void DocParser::parse(const QString &source, DocPrivate *docPrivate,
break;
case CMD_DIV:
leavePara();
- p1 = getArgument(true);
+ p1 = getArgument(ArgumentParsingOptions::Verbatim);
appendAtom(Atom(Atom::DivLeft, p1));
m_openedCommands.push(cmd);
break;
@@ -545,19 +548,29 @@ void DocParser::parse(const QString &source, DocPrivate *docPrivate,
appendAtom(Atom(Atom::FootnoteLeft));
}
break;
- case CMD_ANNOTATEDLIST:
- appendAtom(Atom(Atom::AnnotatedList, getArgument()));
- break;
+ case CMD_ANNOTATEDLIST: {
+ // Optional sorting directive [ascending|descending]
+ if (isLeftBracketAhead())
+ p2 = getBracketedArgument();
+ else
+ p2.clear();
+ appendAtom(Atom(Atom::AnnotatedList, getArgument(), p2));
+ } break;
case CMD_SINCELIST:
leavePara();
appendAtom(Atom(Atom::SinceList, getRestOfLine().simplified()));
break;
case CMD_GENERATELIST: {
+ // Optional sorting directive [ascending|descending]
+ if (isLeftBracketAhead())
+ p2 = getBracketedArgument();
+ else
+ p2.clear();
QString arg1 = getArgument();
QString arg2 = getOptionalArgument();
if (!arg2.isEmpty())
arg1 += " " + arg2;
- appendAtom(Atom(Atom::GeneratedList, arg1));
+ appendAtom(Atom(Atom::GeneratedList, arg1, p2));
} break;
case CMD_HEADER:
if (m_openedCommands.top() == CMD_TABLE) {
@@ -851,7 +864,7 @@ void DocParser::parse(const QString &source, DocPrivate *docPrivate,
if (m_openedCommands.top() == CMD_TABLE) {
p1.clear();
if (isLeftBraceAhead())
- p1 = getArgument(true);
+ p1 = getArgument(ArgumentParsingOptions::Verbatim);
leaveTableRow();
appendAtom(Atom(Atom::TableRowLeft, p1));
m_inTableRow = true;
@@ -917,7 +930,7 @@ void DocParser::parse(const QString &source, DocPrivate *docPrivate,
break;
}
case CMD_SPAN:
- p1 = ATOM_FORMATTING_SPAN + getArgument(true);
+ p1 = ATOM_FORMATTING_SPAN + getArgument(ArgumentParsingOptions::Verbatim);
startFormat(p1, cmd);
break;
case CMD_SNIPPET: {
@@ -967,6 +980,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 +1179,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 +1194,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 +1477,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);
}
}
}
@@ -1977,7 +2001,20 @@ void DocParser::quoteFromFile(const QString &filename)
Expands a macro in-place in input.
Expects the current \e pos in the input to point to a backslash, and the macro to have a
- default definition. Format-specific macros are currently not expanded.
+ default definition. Format-specific macros are not expanded.
+
+ Behavior depends on \a options:
+
+ \value ArgumentParsingOptions::Default
+ Default macro expansion; the string following the backslash
+ must be a macro with a default definition.
+ \value ArgumentParsingOptions::Verbatim
+ The string following the backslash is rendered verbatim;
+ No macro expansion is performed.
+ \value ArgumentParsingOptions::MacroArguments
+ Used for parsing argument(s) for a macro. Allows expanding
+ macros, and also preserves a subset of commands (formatting
+ commands) within the macro argument.
\note In addition to macros, a valid use for a backslash in an argument include
escaping non-alnum characters, and splitting a single argument across multiple
@@ -1985,10 +2022,13 @@ void DocParser::quoteFromFile(const QString &filename)
Returns \c true on successful macro expansion.
*/
-bool DocParser::expandMacro()
+bool DocParser::expandMacro(ArgumentParsingOptions options)
{
Q_ASSERT(m_input[m_position].unicode() == '\\');
+ if (options == ArgumentParsingOptions::Verbatim)
+ return false;
+
QString cmdStr;
qsizetype backslashPos = m_position++;
while (m_position < m_input.size() && m_input[m_position].isLetterOrNumber())
@@ -2005,12 +2045,16 @@ bool DocParser::expandMacro()
m_position = backslashPos;
return true;
} else {
- location().warning(QStringLiteral("Macro '%1' does not have a default definition")
- .arg(cmdStr));
+ location().warning("Macro '%1' does not have a default definition"_L1.arg(cmdStr));
}
} else {
- location().warning(QStringLiteral("Unknown macro '%1'").arg(cmdStr));
- m_position = ++backslashPos;
+ int cmd = s_utilities.cmdHash.value(cmdStr, NOT_A_CMD);
+ m_position = backslashPos;
+ if (options != ArgumentParsingOptions::MacroArguments
+ || cmd == NOT_A_CMD || !cmds[cmd].is_formatting_command) {
+ location().warning("Unknown macro '%1'"_L1.arg(cmdStr));
+ ++m_position;
+ }
}
} else if (m_input[m_position].isSpace()) {
skipAllSpaces();
@@ -2104,10 +2148,11 @@ Doc::Sections DocParser::getSectioningUnit()
is the left brace. On exit, the current character is the one
that comes after the right brace.
- If \a verbatim is true, extra whitespace is retained in the
- returned string. Otherwise, extra whitespace is removed.
+ If \a options is ArgumentParsingOptions::Verbatim, no macro
+ expansion is performed, nor is the returned string stripped
+ of extra whitespace.
*/
-QString DocParser::getBracedArgument(bool verbatim)
+QString DocParser::getBracedArgument(ArgumentParsingOptions options)
{
QString arg;
int delimDepth = 0;
@@ -2127,11 +2172,11 @@ QString DocParser::getBracedArgument(bool verbatim)
++m_position;
break;
case '\\':
- if (verbatim || !expandMacro())
+ if (!expandMacro(options))
arg += m_input[m_position++];
break;
default:
- if (m_input[m_position].isSpace() && !verbatim)
+ if (m_input[m_position].isSpace() && options != ArgumentParsingOptions::Verbatim)
arg += QChar(' ');
else
arg += m_input[m_position];
@@ -2146,6 +2191,9 @@ QString DocParser::getBracedArgument(bool verbatim)
}
/*!
+ Parses and returns an argument for a command, using
+ specific parsing \a options.
+
Typically, an argument ends at the next white-space. However,
braces can be used to group words:
@@ -2158,13 +2206,13 @@ QString DocParser::getBracedArgument(bool verbatim)
is an argument too, although it contains spaces. Finally,
trailing punctuation is not included in an argument, nor is 's.
*/
-QString DocParser::getArgument(bool verbatim)
+QString DocParser::getArgument(ArgumentParsingOptions options)
{
skipSpacesOrOneEndl();
int delimDepth = 0;
qsizetype startPos = m_position;
- QString arg = getBracedArgument(verbatim);
+ QString arg = getBracedArgument(options);
if (arg.isEmpty()) {
while ((m_position < m_input.size())
&& ((delimDepth > 0) || ((delimDepth == 0) && !m_input[m_position].isSpace()))) {
@@ -2186,7 +2234,7 @@ QString DocParser::getArgument(bool verbatim)
}
break;
case '\\':
- if (verbatim || !expandMacro())
+ if (!expandMacro(options))
arg += m_input[m_position++];
break;
default:
@@ -2261,7 +2309,7 @@ QStringList DocParser::getMacroArguments(const QString &name, const Macro &macro
QStringList args;
for (int i = 0; i < macro.numParams; ++i) {
if (macro.numParams == 1 || isLeftBraceAhead()) {
- args << getArgument();
+ args << getArgument(ArgumentParsingOptions::MacroArguments);
} else {
location().warning(QStringLiteral("Macro '\\%1' invoked with too few"
" arguments (expected %2, got %3)")
@@ -2364,7 +2412,7 @@ QString DocParser::getMetaCommandArgument(const QString &cmdStr)
++parenDepth;
else if (m_input.at(m_position) == ')')
--parenDepth;
- else if (m_input.at(m_position) == '\\' && expandMacro())
+ else if (m_input.at(m_position) == '\\' && expandMacro(ArgumentParsingOptions::Default))
continue;
++m_position;
}
diff --git a/src/qdoc/qdoc/src/qdoc/docparser.h b/src/qdoc/qdoc/src/qdoc/docparser.h
index af2d66616..c577e12ba 100644
--- a/src/qdoc/qdoc/src/qdoc/docparser.h
+++ b/src/qdoc/qdoc/src/qdoc/docparser.h
@@ -44,6 +44,13 @@ public:
static bool s_quoting;
private:
+
+ enum class ArgumentParsingOptions {
+ Default,
+ Verbatim,
+ MacroArguments
+ };
+
Location &location();
QString detailsUnknownCommand(const QSet<QString> &metaCommandSet, const QString &str);
void insertTarget(const QString &target);
@@ -68,12 +75,12 @@ private:
void leaveValueList();
void leaveTableRow();
void quoteFromFile(const QString& filename);
- bool expandMacro();
+ bool expandMacro(ArgumentParsingOptions options);
void expandMacro(const QString &def, const QStringList &args);
QString expandMacroToString(const QString &name, const Macro &macro);
Doc::Sections getSectioningUnit();
- QString getArgument(bool verbatim = false);
- QString getBracedArgument(bool verbatim);
+ QString getArgument(ArgumentParsingOptions options = ArgumentParsingOptions::Default);
+ QString getBracedArgument(ArgumentParsingOptions options);
QString getBracketedArgument();
QStringList getMacroArguments(const QString &name, const Macro &macro);
QString getOptionalArgument();
diff --git a/src/qdoc/qdoc/src/qdoc/generator.cpp b/src/qdoc/qdoc/src/qdoc/generator.cpp
index 9ba4de976..d1b3642c3 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();
}
@@ -2037,20 +2078,13 @@ void Generator::generateEnumValuesForQmlProperty(const Node *node, CodeMarker *m
if (!qpn->enumNode())
return;
- auto findNext =
- [](const Atom *atom, Atom::AtomType type, const QString &str) {
- while (atom && (atom->type() != type || atom->string() != str))
- atom = atom->next();
- return atom;
- };
-
// Retrieve atoms from C++ enum \value list
const auto body{qpn->enumNode()->doc().body()};
const auto *start{body.firstAtom()};
Text text;
- while ((start = findNext(start, Atom::ListLeft, ATOM_LIST_VALUE))) {
- const auto end = findNext(start, Atom::ListRight, ATOM_LIST_VALUE);
+ while ((start = start->find(Atom::ListLeft, ATOM_LIST_VALUE))) {
+ const auto end = start->find(Atom::ListRight, ATOM_LIST_VALUE);
// Skip subsequent ListLeft atoms, collating multiple lists into one
text << body.subText(text.isEmpty() ? start : start->next(), end);
start = end;
diff --git a/src/qdoc/qdoc/src/qdoc/generator.h b/src/qdoc/qdoc/src/qdoc/generator.h
index 8f2b34039..164882a8f 100644
--- a/src/qdoc/qdoc/src/qdoc/generator.h
+++ b/src/qdoc/qdoc/src/qdoc/generator.h
@@ -160,6 +160,12 @@ 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);
+
+ static Qt::SortOrder sortOrder(const QString &str)
+ {
+ return (str == "descending") ? Qt::DescendingOrder : Qt::AscendingOrder;
+ }
private:
static Generator *s_currentGenerator;
@@ -171,6 +177,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..e18cac8b6 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, "<span translate=\"no\">", "&#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,18 @@ 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()];
+ }
+ out() << "</span>";
} else if (atom->string().startsWith("span ")) {
out() << "</span>";
} else {
@@ -423,13 +439,13 @@ qsizetype HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, Co
}
break;
case Atom::AnnotatedList: {
- const CollectionNode *cn = m_qdb->getCollectionNode(atom->string(), Node::Group);
- if (cn)
- generateList(cn, marker, atom->string());
+ if (const auto *cn = m_qdb->getCollectionNode(atom->string(), Node::Group); cn)
+ generateList(cn, marker, atom->string(), Generator::sortOrder(atom->strings().last()));
} break;
- case Atom::GeneratedList:
+ case Atom::GeneratedList: {
+ const auto sortOrder{Generator::sortOrder(atom->strings().last())};
if (atom->string() == QLatin1String("annotatedclasses")) {
- generateAnnotatedList(relative, marker, m_qdb->getCppClasses().values());
+ generateAnnotatedList(relative, marker, m_qdb->getCppClasses().values(), sortOrder);
} else if (atom->string() == QLatin1String("annotatedexamples")) {
generateAnnotatedLists(relative, marker, m_qdb->getExamples());
} else if (atom->string() == QLatin1String("annotatedattributions")) {
@@ -456,17 +472,17 @@ qsizetype HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, Co
case Node::Module:
// classesbymodule <module_name>
map = cn->getMembers([](const Node *n) { return n->isClassNode(); });
- generateAnnotatedList(relative, marker, map.values());
+ generateAnnotatedList(relative, marker, map.values(), sortOrder);
break;
case Node::QmlModule:
if (atom->string().contains(QLatin1String("qmlvaluetypes")))
map = cn->getMembers(Node::QmlValueType); // qmlvaluetypesbymodule <module_name>
else
map = cn->getMembers(Node::QmlType); // qmltypesbymodule <module_name>
- generateAnnotatedList(relative, marker, map.values());
+ generateAnnotatedList(relative, marker, map.values(), sortOrder);
break;
default: // fall back to listing all members
- generateAnnotatedList(relative, marker, cn->members());
+ generateAnnotatedList(relative, marker, cn->members(), sortOrder);
break;
}
}
@@ -487,23 +503,23 @@ qsizetype HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, Co
} else if (atom->string() == QLatin1String("functionindex")) {
generateFunctionIndex(relative);
} else if (atom->string() == QLatin1String("attributions")) {
- generateAnnotatedList(relative, marker, m_qdb->getAttributions().values());
+ generateAnnotatedList(relative, marker, m_qdb->getAttributions().values(), sortOrder);
} else if (atom->string() == QLatin1String("legalese")) {
generateLegaleseList(relative, marker);
} else if (atom->string() == QLatin1String("overviews")) {
- generateList(relative, marker, "overviews");
+ generateList(relative, marker, "overviews", sortOrder);
} else if (atom->string() == QLatin1String("cpp-modules")) {
- generateList(relative, marker, "cpp-modules");
+ generateList(relative, marker, "cpp-modules", sortOrder);
} else if (atom->string() == QLatin1String("qml-modules")) {
- generateList(relative, marker, "qml-modules");
+ generateList(relative, marker, "qml-modules", sortOrder);
} else if (atom->string() == QLatin1String("namespaces")) {
- generateAnnotatedList(relative, marker, m_qdb->getNamespaces().values());
+ generateAnnotatedList(relative, marker, m_qdb->getNamespaces().values(), sortOrder);
} else if (atom->string() == QLatin1String("related")) {
- generateList(relative, marker, "related");
+ generateList(relative, marker, "related", sortOrder);
} else {
const CollectionNode *cn = m_qdb->getCollectionNode(atom->string(), Node::Group);
if (cn) {
- if (!generateGroupList(const_cast<CollectionNode *>(cn)))
+ if (!generateGroupList(const_cast<CollectionNode *>(cn), sortOrder))
relative->location().warning(
QString("'\\generatelist %1' group is empty").arg(atom->string()));
} else {
@@ -511,7 +527,7 @@ qsizetype HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, Co
QString("'\\generatelist %1' no such group").arg(atom->string()));
}
}
- break;
+ } break;
case Atom::SinceList: {
const NodeMultiMap &nsmap = m_qdb->getSinceMap(atom->string());
if (nsmap.isEmpty())
@@ -699,8 +715,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 +1931,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 +1950,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 +2041,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 +2192,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 +2217,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 +2257,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()) {
@@ -2622,7 +2645,7 @@ void HtmlGenerator::generateClassHierarchy(const Node *relative, NodeMultiMap &c
A two-column table is output.
*/
void HtmlGenerator::generateAnnotatedList(const Node *relative, CodeMarker *marker,
- const NodeList &unsortedNodes)
+ const NodeList &unsortedNodes, Qt::SortOrder sortOrder)
{
if (unsortedNodes.isEmpty() || relative == nullptr)
return;
@@ -2640,7 +2663,11 @@ void HtmlGenerator::generateAnnotatedList(const Node *relative, CodeMarker *mark
out() << "<div class=\"table\"><table class=\"annotated\">\n";
int row = 0;
NodeList nodes = nmm.values();
- std::sort(nodes.begin(), nodes.end(), Node::nodeNameLessThan);
+
+ if (sortOrder == Qt::DescendingOrder)
+ std::sort(nodes.rbegin(), nodes.rend(), Node::nodeSortKeyOrNameLessThan);
+ else
+ std::sort(nodes.begin(), nodes.end(), Node::nodeSortKeyOrNameLessThan);
for (const auto *node : std::as_const(nodes)) {
if (++row % 2 == 1)
@@ -2828,22 +2855,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) {
@@ -2941,18 +2965,24 @@ void HtmlGenerator::generateQmlItem(const Node *node, const Node *relative, Code
}
/*!
- This function generates a simple unordered list for the members
- of collection node \a {cn}. Returns \c true if the list was
- generated (collection has members), \c false otherwise.
+ This function generates a simple list (without annotations) for
+ the members of collection node \a {cn}. The list is sorted
+ according to \a sortOrder.
+
+ Returns \c true if the list was generated (collection has members),
+ \c false otherwise.
*/
-bool HtmlGenerator::generateGroupList(CollectionNode *cn)
+bool HtmlGenerator::generateGroupList(CollectionNode *cn, Qt::SortOrder sortOrder)
{
m_qdb->mergeCollections(cn);
if (cn->members().isEmpty())
return false;
NodeList members{cn->members()};
- std::sort(members.begin(), members.end(), Node::nodeNameLessThan);
+ if (sortOrder == Qt::DescendingOrder)
+ std::sort(members.rbegin(), members.rend(), Node::nodeSortKeyOrNameLessThan);
+ else
+ std::sort(members.begin(), members.end(), Node::nodeSortKeyOrNameLessThan);
out() << "<ul>\n";
for (const auto *node : std::as_const(members)) {
out() << "<li translate=\"no\">";
@@ -2963,7 +2993,8 @@ bool HtmlGenerator::generateGroupList(CollectionNode *cn)
return true;
}
-void HtmlGenerator::generateList(const Node *relative, CodeMarker *marker, const QString &selector)
+void HtmlGenerator::generateList(const Node *relative, CodeMarker *marker,
+ const QString &selector, Qt::SortOrder sortOrder)
{
CNMap cnm;
Node::NodeType type = Node::NoType;
@@ -2980,7 +3011,7 @@ void HtmlGenerator::generateList(const Node *relative, CodeMarker *marker, const
nodeList.reserve(collectionList.size());
for (auto *collectionNode : collectionList)
nodeList.append(collectionNode);
- generateAnnotatedList(relative, marker, nodeList);
+ generateAnnotatedList(relative, marker, nodeList, sortOrder);
} else {
/*
\generatelist {selector} is only allowed in a
@@ -2997,7 +3028,7 @@ void HtmlGenerator::generateList(const Node *relative, CodeMarker *marker, const
auto *node = const_cast<Node *>(relative);
auto *collectionNode = static_cast<CollectionNode *>(node);
m_qdb->mergeCollections(collectionNode);
- generateAnnotatedList(collectionNode, marker, collectionNode->members());
+ generateAnnotatedList(collectionNode, marker, collectionNode->members(), sortOrder);
}
}
@@ -3520,12 +3551,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..299240c24 100644
--- a/src/qdoc/qdoc/src/qdoc/htmlgenerator.h
+++ b/src/qdoc/qdoc/src/qdoc/htmlgenerator.h
@@ -69,13 +69,15 @@ private:
void generateClassHierarchy(const Node *relative, NodeMultiMap &classMap);
void generateAnnotatedLists(const Node *relative, CodeMarker *marker,
const NodeMultiMap &nodeMap);
- void generateAnnotatedList(const Node *relative, CodeMarker *marker, const NodeList &nodes);
+ void generateAnnotatedList(const Node *relative, CodeMarker *marker, const NodeList &nodes,
+ Qt::SortOrder sortOrder = Qt::AscendingOrder);
void generateCompactList(ListType listType, const Node *relative, const NodeMultiMap &classMap,
bool includeAlphabet, const QString &commonPrefix);
void generateFunctionIndex(const Node *relative);
void generateLegaleseList(const Node *relative, CodeMarker *marker);
- bool generateGroupList(CollectionNode *cn);
- void generateList(const Node *relative, CodeMarker *marker, const QString &selector);
+ bool generateGroupList(CollectionNode *cn, Qt::SortOrder sortOrder = Qt::AscendingOrder);
+ void generateList(const Node *relative, CodeMarker *marker, const QString &selector,
+ Qt::SortOrder sortOrder = Qt::AscendingOrder);
void generateSectionList(const Section &section, const Node *relative, CodeMarker *marker,
bool useObsoloteMembers = false);
void generateQmlSummary(const NodeVector &members, const Node *relative, CodeMarker *marker);
@@ -112,8 +114,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 +158,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/node.cpp b/src/qdoc/qdoc/src/qdoc/node.cpp
index 1aadbdeb1..2857aecba 100644
--- a/src/qdoc/qdoc/src/qdoc/node.cpp
+++ b/src/qdoc/qdoc/src/qdoc/node.cpp
@@ -24,6 +24,8 @@
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
/*!
\class Node
\brief The Node class is the base class for all the nodes in QDoc's parse tree.
@@ -80,6 +82,33 @@ bool Node::nodeNameLessThan(const Node *n1, const Node *n2)
return false;
}
+
+/*!
+ Returns \c true if node \a n1 is less than node \a n2 when comparing
+ the sort keys, defined with
+
+ \badcode
+ \meta sortkey {<value>}
+ \endcode
+
+ in the respective nodes' documentation. If the two sort keys are equal,
+ falls back to nodeNameLessThan(). If \a n1 defines a sort key and \a n2
+ does not, then n1 < n2.
+
+*/
+bool Node::nodeSortKeyOrNameLessThan(const Node *n1, const Node *n2)
+{
+ const QString default_sortkey{QChar{QChar::LastValidCodePoint}};
+ const auto *n1_metamap{n1->doc().metaTagMap()};
+ const auto *n2_metamap{n2->doc().metaTagMap()};
+ if (auto cmp = QString::compare(
+ n1_metamap ? n1_metamap->value(u"sortkey"_s, default_sortkey) : default_sortkey,
+ n2_metamap ? n2_metamap->value(u"sortkey"_s, default_sortkey) : default_sortkey); cmp != 0) {
+ return cmp < 0;
+ }
+ return nodeNameLessThan(n1, n2);
+}
+
/*!
\enum Node::NodeType
diff --git a/src/qdoc/qdoc/src/qdoc/node.h b/src/qdoc/qdoc/src/qdoc/node.h
index 3b5eb56bd..faf06d51c 100644
--- a/src/qdoc/qdoc/src/qdoc/node.h
+++ b/src/qdoc/qdoc/src/qdoc/node.h
@@ -304,7 +304,8 @@ public:
static FlagValue toFlagValue(bool b);
static bool fromFlagValue(FlagValue fv, bool defaultValue);
static QString nodeTypeString(NodeType t);
- static bool nodeNameLessThan(const Node *first, const Node *second);
+ [[nodiscard]] static bool nodeNameLessThan(const Node *first, const Node *second);
+ [[nodiscard]] static bool nodeSortKeyOrNameLessThan(const Node *n1, const Node *n2);
protected:
Node(NodeType type, Aggregate *parent, QString name);
diff --git a/src/qdoc/qdoc/src/qdoc/qdocindexfiles.cpp b/src/qdoc/qdoc/src/qdoc/qdocindexfiles.cpp
index db6852c23..f2f0d017e 100644
--- a/src/qdoc/qdoc/src/qdoc/qdocindexfiles.cpp
+++ b/src/qdoc/qdoc/src/qdoc/qdocindexfiles.cpp
@@ -599,6 +599,11 @@ void QDocIndexFiles::readIndexSection(QXmlStreamReader &reader, Node *current,
node->setReconstitutedBrief(briefAttr);
}
+ if (const auto sortKey = attributes.value(QLatin1String("sortkey")).toString(); !sortKey.isEmpty()) {
+ node->doc().constructExtra();
+ if (auto *metaMap = node->doc().metaTagMap())
+ metaMap->insert("sortkey", sortKey);
+ }
if (!hasReadChildren) {
bool useParent = (elementName == QLatin1String("namespace") && name.isEmpty());
while (reader.readNextStartElement()) {
@@ -753,6 +758,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.
@@ -922,6 +959,10 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter &writer, Node *node,
if (!groups.isEmpty())
writer.writeAttribute("groups", groups.join(QLatin1Char(',')));
+ if (const auto *metamap = node->doc().metaTagMap(); metamap)
+ if (const auto sortKey = metamap->value("sortkey"); !sortKey.isEmpty())
+ writer.writeAttribute("sortkey", sortKey);
+
QString brief = node->doc().trimmedBriefText(node->name()).toString();
switch (node->nodeType()) {
case Node::Class:
@@ -1073,48 +1114,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 +1294,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..5c8f7d6d1 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);
}
}
}
@@ -327,15 +327,9 @@ void Tree::resolveSince(Aggregate &aggregate)
*/
void Tree::resolveEnumValueSince(EnumNode &en)
{
- auto findNextAtom = [](const Atom *a, Atom::AtomType t) {
- while (a && a->type() != t)
- a = a->next();
- return a;
- };
-
const QStringList enumItems{en.doc().enumItemNames()};
const Atom *atom = en.doc().body().firstAtom();
- while ((atom = findNextAtom(atom, Atom::ListTagLeft))) {
+ while ((atom = atom->find(Atom::ListTagLeft))) {
if (atom = atom->next(); !atom)
break;
if (auto val = atom->string(); enumItems.contains(val)) {
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/compiler_generated_member_functions/compiler_generated_member_functions.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/compiler_generated_member_functions.qdocconf
new file mode 100644
index 000000000..3a369e673
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/compiler_generated_member_functions.qdocconf
@@ -0,0 +1,23 @@
+project = Compiler generated member functions
+
+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/compiler_generated_member_functions/expected/docbook/qdoctests-compilergeneratedmemberfunctions.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/docbook/qdoctests-compilergeneratedmemberfunctions.xml
new file mode 100644
index 000000000..43bf5cdca
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/docbook/qdoctests-compilergeneratedmemberfunctions.xml
@@ -0,0 +1,39 @@
+<?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>CompilerGeneratedMemberFunctions Class</db:title>
+<db:subtitle>QDocTests::CompilerGeneratedMemberFunctions</db:subtitle>
+<db:productname>Compiler generated member functions</db:productname>
+<db:titleabbrev>Compiler generated member functions Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>A test class for compiler-generated member functions.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>CompilerGeneratedMemberFunctions</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+<db:para>This class is used to test the documentation of compiler-generated member functions.</db:para>
+</db:section>
+<db:section xml:id="member-function-documentation">
+<db:title>Member Function Documentation</db:title>
+<db:section xml:id="CompilerGeneratedMemberFunctions">
+<db:title>[constexpr noexcept default] CompilerGeneratedMemberFunctions::CompilerGeneratedMemberFunctions()</db:title>
+<db:para>Constructs a <db:link xlink:href="qdoctests-compilergeneratedmemberfunctions.xml">CompilerGeneratedMemberFunctions</db:link> object.</db:para>
+</db:section>
+<db:section xml:id="CompilerGeneratedMemberFunctions-1">
+<db:title>[constexpr noexcept default] CompilerGeneratedMemberFunctions::CompilerGeneratedMemberFunctions(const QDocTests::CompilerGeneratedMemberFunctions &amp;<db:emphasis>other</db:emphasis>)</db:title>
+<db:para>Copy-constructs a <db:link xlink:href="qdoctests-compilergeneratedmemberfunctions.xml">CompilerGeneratedMemberFunctions</db:link> object from <db:code role="parameter">other</db:code>.</db:para>
+</db:section>
+<db:section xml:id="CompilerGeneratedMemberFunctions-2">
+<db:title>[constexpr noexcept default] CompilerGeneratedMemberFunctions::CompilerGeneratedMemberFunctions(const QDocTests::CompilerGeneratedMemberFunctions &amp;&amp;<db:emphasis>other</db:emphasis>)</db:title>
+<db:para>Move-constructs a <db:link xlink:href="qdoctests-compilergeneratedmemberfunctions.xml">CompilerGeneratedMemberFunctions</db:link> object from <db:code role="parameter">other</db:code>.</db:para>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/docbook/qdoctests-module.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/docbook/qdoctests-module.xml
new file mode 100644
index 000000000..91f92c1c5
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/docbook/qdoctests-module.xml
@@ -0,0 +1,38 @@
+<?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>Compiler generated member functions</db:productname>
+<db:titleabbrev>Compiler generated member functions Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>The <db:link xlink:href="qdoctests-module.xml">QDocTests</db:link> module contains test classes for QDoc.</db:para>
+</db:abstract>
+</db:info>
+<db:para>The <db:link xlink:href="qdoctests-module.xml">QDocTests</db:link> module contains test classes for QDoc.</db:para>
+<db:section xml:id="namespaces">
+<db:title>Namespaces</db:title>
+<db:variablelist role="namespaces">
+<db:varlistentry>
+<db:term><db:link xlink:href="qdoctests.xml" xlink:role="namespace">QDocTests</db:link></db:term>
+<db:listitem>
+<db:para>The QDocTests namespace contains test classes for QDoc.</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+</db:section>
+<db:section xml:id="classes">
+<db:title>Classes</db:title>
+<db:variablelist role="classes">
+<db:varlistentry>
+<db:term><db:link xlink:href="qdoctests-compilergeneratedmemberfunctions.xml" xlink:role="class">QDocTests::CompilerGeneratedMemberFunctions</db:link></db:term>
+<db:listitem>
+<db:para>A test class for compiler-generated member functions.</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+</db:section>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+<db:para>The <db:link xlink:href="qdoctests-module.xml">QDocTests</db:link> module contains test classes for QDoc.</db:para>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/docbook/qdoctests.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/docbook/qdoctests.xml
new file mode 100644
index 000000000..04ad76f26
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/docbook/qdoctests.xml
@@ -0,0 +1,30 @@
+<?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>QDocTests Namespace</db:title>
+<db:productname>Compiler generated member functions</db:productname>
+<db:titleabbrev>Compiler generated member functions Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>The <db:link xlink:href="qdoctests-module.xml">QDocTests</db:link> namespace contains test classes for QDoc.</db:para>
+</db:abstract>
+</db:info>
+<db:variablelist>
+<db:varlistentry>
+<db:term>Header</db:term>
+<db:listitem>
+<db:para>QDocTests</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+<db:para>The <db:link xlink:href="qdoctests-module.xml">QDocTests</db:link> namespace contains test classes for QDoc.</db:para>
+</db:section>
+<db:section xml:id="classes">
+<db:title>Classes</db:title>
+<db:section>
+<db:title>class <db:link xlink:href="qdoctests-compilergeneratedmemberfunctions.xml" xlink:role="class">CompilerGeneratedMemberFunctions</db:link></db:title>
+<db:para>A test class for compiler-generated member functions.</db:para>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/html/compiler-generated-member-functions.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/html/compiler-generated-member-functions.index
new file mode 100644
index 000000000..30a694078
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/html/compiler-generated-member-functions.index
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="Compiler generated member functions Reference Documentation" version="" project="Compiler generated member functions">
+ <namespace name="" status="active" access="public" module="compiler generated member functions">
+ <namespace name="QDocTests" href="qdoctests.html" status="active" access="public" location="compilergeneratedmemberfunctions.h" documented="true" module="QDocTests" brief="Contains test classes for QDoc">
+ <class name="CompilerGeneratedMemberFunctions" fullname="QDocTests::CompilerGeneratedMemberFunctions" href="qdoctests-compilergeneratedmemberfunctions.html" status="active" access="public" location="compilergeneratedmemberfunctions.h" documented="true" module="QDocTests" brief="A test class for compiler-generated member functions">
+ <function name="CompilerGeneratedMemberFunctions" fullname="QDocTests::CompilerGeneratedMemberFunctions::CompilerGeneratedMemberFunctions" href="qdoctests-compilergeneratedmemberfunctions.html#CompilerGeneratedMemberFunctions" status="active" access="public" documented="true" meta="constructor" constexpr="true" noexcept="true" signature="CompilerGeneratedMemberFunctions()"/>
+ <function name="CompilerGeneratedMemberFunctions" fullname="QDocTests::CompilerGeneratedMemberFunctions::CompilerGeneratedMemberFunctions" href="qdoctests-compilergeneratedmemberfunctions.html#CompilerGeneratedMemberFunctions-1" status="active" access="public" documented="true" meta="copy-constructor" constexpr="true" noexcept="true" overload="true" overload-number="1" signature="CompilerGeneratedMemberFunctions(const QDocTests::CompilerGeneratedMemberFunctions &amp;other)">
+ <parameter type="const QDocTests::CompilerGeneratedMemberFunctions &amp;" name="other" default=""/>
+ </function>
+ <function name="CompilerGeneratedMemberFunctions" fullname="QDocTests::CompilerGeneratedMemberFunctions::CompilerGeneratedMemberFunctions" href="qdoctests-compilergeneratedmemberfunctions.html#CompilerGeneratedMemberFunctions-2" status="active" access="public" documented="true" meta="move-constructor" constexpr="true" noexcept="true" overload="true" overload-number="2" signature="CompilerGeneratedMemberFunctions(const QDocTests::CompilerGeneratedMemberFunctions &amp;&amp;other)">
+ <parameter type="const QDocTests::CompilerGeneratedMemberFunctions &amp;&amp;" name="other" default=""/>
+ </function>
+ </class>
+ </namespace>
+ <module name="QDocTests" href="qdoctests-module.html" status="active" documented="true" seen="true" title="" brief="Module contains test classes for QDoc"/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/html/qdoctests-compilergeneratedmemberfunctions-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/html/qdoctests-compilergeneratedmemberfunctions-members.html
new file mode 100644
index 000000000..825a2352a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/html/qdoctests-compilergeneratedmemberfunctions-members.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- compilergeneratedmemberfunctions.cpp -->
+ <meta name="description" content="A test class for compiler-generated member functions.">
+ <title>List of All Members for CompilerGeneratedMemberFunctions | Compiler generated member functions</title>
+</head>
+<body>
+<li>CompilerGeneratedMemberFunctions</li>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title" translate="no">List of All Members for CompilerGeneratedMemberFunctions</h1>
+<p>This is the complete list of members for <a href="qdoctests-compilergeneratedmemberfunctions.html">QDocTests::CompilerGeneratedMemberFunctions</a>, including inherited members.</p>
+<ul>
+<li class="fn" translate="no"><span class="name"><b><a href="qdoctests-compilergeneratedmemberfunctions.html#CompilerGeneratedMemberFunctions" translate="no">CompilerGeneratedMemberFunctions</a></b></span>()</li>
+<li class="fn" translate="no"><span class="name"><b><a href="qdoctests-compilergeneratedmemberfunctions.html#CompilerGeneratedMemberFunctions-1" translate="no">CompilerGeneratedMemberFunctions</a></b></span>(const QDocTests::CompilerGeneratedMemberFunctions &amp;)</li>
+<li class="fn" translate="no"><span class="name"><b><a href="qdoctests-compilergeneratedmemberfunctions.html#CompilerGeneratedMemberFunctions-2" translate="no">CompilerGeneratedMemberFunctions</a></b></span>(const QDocTests::CompilerGeneratedMemberFunctions &amp;&amp;)</li>
+</ul>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/html/qdoctests-compilergeneratedmemberfunctions.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/html/qdoctests-compilergeneratedmemberfunctions.html
new file mode 100644
index 000000000..6a4fe947f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/html/qdoctests-compilergeneratedmemberfunctions.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- compilergeneratedmemberfunctions.cpp -->
+ <meta name="description" content="A test class for compiler-generated member functions.">
+ <title>CompilerGeneratedMemberFunctions Class | Compiler generated member functions</title>
+</head>
+<body>
+<li>CompilerGeneratedMemberFunctions</li>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#public-functions">Public Functions</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">CompilerGeneratedMemberFunctions Class</h1>
+<span class="small-subtitle" translate="no">class <a href="qdoctests-module.html" translate="no">QDocTests</a>::CompilerGeneratedMemberFunctions</span>
+<!-- $$$CompilerGeneratedMemberFunctions-brief -->
+<p>A test class for compiler-generated member functions. <a href="#details">More...</a></p>
+<!-- @@@CompilerGeneratedMemberFunctions -->
+<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;CompilerGeneratedMemberFunctions&gt;</span></td></tr>
+</table></div>
+<ul>
+<li><a href="qdoctests-compilergeneratedmemberfunctions-members.html">List of all members, including inherited members</a></li>
+</ul>
+<h2 id="public-functions">Public Functions</h2>
+<div class="table"><table class="alignedsummary" translate="no">
+<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="qdoctests-compilergeneratedmemberfunctions.html#CompilerGeneratedMemberFunctions" translate="no">CompilerGeneratedMemberFunctions</a></b>()</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="qdoctests-compilergeneratedmemberfunctions.html#CompilerGeneratedMemberFunctions-1" translate="no">CompilerGeneratedMemberFunctions</a></b>(const QDocTests::CompilerGeneratedMemberFunctions &amp;<i>other</i>)</td></tr>
+<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="qdoctests-compilergeneratedmemberfunctions.html#CompilerGeneratedMemberFunctions-2" translate="no">CompilerGeneratedMemberFunctions</a></b>(const QDocTests::CompilerGeneratedMemberFunctions &amp;&amp;<i>other</i>)</td></tr>
+</table></div>
+<!-- $$$CompilerGeneratedMemberFunctions-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<p>This class is used to test the documentation of compiler-generated member functions.</p>
+</div>
+<!-- @@@CompilerGeneratedMemberFunctions -->
+<div class="func">
+<h2>Member Function Documentation</h2>
+<!-- $$$CompilerGeneratedMemberFunctions[overload1]$$$CompilerGeneratedMemberFunctions -->
+<h3 class="fn" translate="no" id="CompilerGeneratedMemberFunctions"><code class="details extra" translate="no">[constexpr noexcept default]</code> CompilerGeneratedMemberFunctions::<span class="name">CompilerGeneratedMemberFunctions</span>()</h3>
+<p>Constructs a CompilerGeneratedMemberFunctions object.</p>
+<!-- @@@CompilerGeneratedMemberFunctions -->
+<!-- $$$CompilerGeneratedMemberFunctions$$$CompilerGeneratedMemberFunctionsconstQDocTests::CompilerGeneratedMemberFunctions& -->
+<h3 class="fn" translate="no" id="CompilerGeneratedMemberFunctions-1"><code class="details extra" translate="no">[constexpr noexcept default]</code> CompilerGeneratedMemberFunctions::<span class="name">CompilerGeneratedMemberFunctions</span>(const <span class="type"><a href="qdoctests-compilergeneratedmemberfunctions.html" translate="no">QDocTests::CompilerGeneratedMemberFunctions</a></span> &amp;<i>other</i>)</h3>
+<p>Copy-constructs a CompilerGeneratedMemberFunctions object from <i translate="no">other</i>.</p>
+<!-- @@@CompilerGeneratedMemberFunctions -->
+<!-- $$$CompilerGeneratedMemberFunctions$$$CompilerGeneratedMemberFunctionsconstQDocTests::CompilerGeneratedMemberFunctions&& -->
+<h3 class="fn" translate="no" id="CompilerGeneratedMemberFunctions-2"><code class="details extra" translate="no">[constexpr noexcept default]</code> CompilerGeneratedMemberFunctions::<span class="name">CompilerGeneratedMemberFunctions</span>(const <span class="type"><a href="qdoctests-compilergeneratedmemberfunctions.html" translate="no">QDocTests::CompilerGeneratedMemberFunctions</a></span> &amp;&amp;<i>other</i>)</h3>
+<p>Move-constructs a CompilerGeneratedMemberFunctions object from <i translate="no">other</i>.</p>
+<!-- @@@CompilerGeneratedMemberFunctions -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/html/qdoctests-module.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/html/qdoctests-module.html
new file mode 100644
index 000000000..d85654134
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/html/qdoctests-module.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- compilergeneratedmemberfunctions.cpp -->
+ <meta name="description" content="The QDocTests module contains test classes for QDoc.">
+ <title>Compiler generated member functions</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>
+<!-- $$$QDocTests-brief -->
+<p>The QDocTests module contains test classes for QDoc. <a href="#details">More...</a></p>
+<!-- @@@QDocTests -->
+<h2 id="namespaces">Namespaces</h2>
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="qdoctests.html">QDocTests</a></p></td><td class="tblDescr"><p>Contains test classes for QDoc</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="qdoctests-compilergeneratedmemberfunctions.html">QDocTests::CompilerGeneratedMemberFunctions</a></p></td><td class="tblDescr"><p>A test class for compiler-generated member functions</p></td></tr>
+</table></div>
+<!-- $$$QDocTests-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<p>The QDocTests module contains test classes for QDoc.</p>
+</div>
+<!-- @@@QDocTests -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/html/qdoctests.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/html/qdoctests.html
new file mode 100644
index 000000000..2f6741fa0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/html/qdoctests.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- compilergeneratedmemberfunctions.cpp -->
+ <meta name="description" content="The QDocTests namespace contains test classes for QDoc.">
+ <title>QDocTests Namespace | Compiler generated member functions</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">QDocTests Namespace</h1>
+<!-- $$$QDocTests-brief -->
+<p>The QDocTests namespace contains test classes for QDoc. <a href="#details">More...</a></p>
+<!-- @@@QDocTests -->
+<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;QDocTests&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="qdoctests-compilergeneratedmemberfunctions.html" translate="no">CompilerGeneratedMemberFunctions</a></b></td></tr>
+</table></div>
+<!-- $$$QDocTests-description -->
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<p>The QDocTests namespace contains test classes for QDoc.</p>
+</div>
+<!-- @@@QDocTests -->
+<div class="classes">
+<h2>Classes</h2>
+<h3> class <a href="qdoctests-compilergeneratedmemberfunctions.html">CompilerGeneratedMemberFunctions</a></h3><!-- $$$CompilerGeneratedMemberFunctions-brief -->
+<p>A test class for compiler-generated member functions. <a href="qdoctests-compilergeneratedmemberfunctions.html#details">More...</a></p>
+<!-- @@@CompilerGeneratedMemberFunctions -->
+</div>
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/webxml/compiler-generated-member-functions.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/webxml/compiler-generated-member-functions.index
new file mode 100644
index 000000000..30a694078
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/webxml/compiler-generated-member-functions.index
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="Compiler generated member functions Reference Documentation" version="" project="Compiler generated member functions">
+ <namespace name="" status="active" access="public" module="compiler generated member functions">
+ <namespace name="QDocTests" href="qdoctests.html" status="active" access="public" location="compilergeneratedmemberfunctions.h" documented="true" module="QDocTests" brief="Contains test classes for QDoc">
+ <class name="CompilerGeneratedMemberFunctions" fullname="QDocTests::CompilerGeneratedMemberFunctions" href="qdoctests-compilergeneratedmemberfunctions.html" status="active" access="public" location="compilergeneratedmemberfunctions.h" documented="true" module="QDocTests" brief="A test class for compiler-generated member functions">
+ <function name="CompilerGeneratedMemberFunctions" fullname="QDocTests::CompilerGeneratedMemberFunctions::CompilerGeneratedMemberFunctions" href="qdoctests-compilergeneratedmemberfunctions.html#CompilerGeneratedMemberFunctions" status="active" access="public" documented="true" meta="constructor" constexpr="true" noexcept="true" signature="CompilerGeneratedMemberFunctions()"/>
+ <function name="CompilerGeneratedMemberFunctions" fullname="QDocTests::CompilerGeneratedMemberFunctions::CompilerGeneratedMemberFunctions" href="qdoctests-compilergeneratedmemberfunctions.html#CompilerGeneratedMemberFunctions-1" status="active" access="public" documented="true" meta="copy-constructor" constexpr="true" noexcept="true" overload="true" overload-number="1" signature="CompilerGeneratedMemberFunctions(const QDocTests::CompilerGeneratedMemberFunctions &amp;other)">
+ <parameter type="const QDocTests::CompilerGeneratedMemberFunctions &amp;" name="other" default=""/>
+ </function>
+ <function name="CompilerGeneratedMemberFunctions" fullname="QDocTests::CompilerGeneratedMemberFunctions::CompilerGeneratedMemberFunctions" href="qdoctests-compilergeneratedmemberfunctions.html#CompilerGeneratedMemberFunctions-2" status="active" access="public" documented="true" meta="move-constructor" constexpr="true" noexcept="true" overload="true" overload-number="2" signature="CompilerGeneratedMemberFunctions(const QDocTests::CompilerGeneratedMemberFunctions &amp;&amp;other)">
+ <parameter type="const QDocTests::CompilerGeneratedMemberFunctions &amp;&amp;" name="other" default=""/>
+ </function>
+ </class>
+ </namespace>
+ <module name="QDocTests" href="qdoctests-module.html" status="active" documented="true" seen="true" title="" brief="Module contains test classes for QDoc"/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/webxml/qdoctests-compilergeneratedmemberfunctions.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/webxml/qdoctests-compilergeneratedmemberfunctions.webxml
new file mode 100644
index 000000000..2baf5256e
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/webxml/qdoctests-compilergeneratedmemberfunctions.webxml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <class name="CompilerGeneratedMemberFunctions" fullname="QDocTests::CompilerGeneratedMemberFunctions" href="qdoctests-compilergeneratedmemberfunctions.html" status="active" access="public" location="compilergeneratedmemberfunctions.h" documented="true" module="QDocTests" brief="A test class for compiler-generated member functions">
+ <description>
+ <brief>A test class for compiler-generated member functions.</brief>
+ <para>This class is used to test the documentation of compiler-generated member functions.</para>
+ </description>
+ <function name="CompilerGeneratedMemberFunctions" fullname="QDocTests::CompilerGeneratedMemberFunctions::CompilerGeneratedMemberFunctions" href="qdoctests-compilergeneratedmemberfunctions.html#CompilerGeneratedMemberFunctions" status="active" access="public" documented="true" meta="constructor" constexpr="true" noexcept="true" signature="CompilerGeneratedMemberFunctions()">
+ <description>
+ <para>Constructs a <link raw="CompilerGeneratedMemberFunctions" href="qdoctests-compilergeneratedmemberfunctions.html" type="class">CompilerGeneratedMemberFunctions</link> object.</para>
+ </description>
+ </function>
+ <function name="CompilerGeneratedMemberFunctions" fullname="QDocTests::CompilerGeneratedMemberFunctions::CompilerGeneratedMemberFunctions" href="qdoctests-compilergeneratedmemberfunctions.html#CompilerGeneratedMemberFunctions-1" status="active" access="public" documented="true" meta="copy-constructor" constexpr="true" noexcept="true" overload="true" overload-number="1" signature="CompilerGeneratedMemberFunctions(const QDocTests::CompilerGeneratedMemberFunctions &amp;other)">
+ <parameter type="const QDocTests::CompilerGeneratedMemberFunctions &amp;" name="other" default=""/>
+ <description>
+ <para>Copy-constructs a <link raw="CompilerGeneratedMemberFunctions" href="qdoctests-compilergeneratedmemberfunctions.html" type="class">CompilerGeneratedMemberFunctions</link> object from <argument>other</argument>.</para>
+ </description>
+ </function>
+ <function name="CompilerGeneratedMemberFunctions" fullname="QDocTests::CompilerGeneratedMemberFunctions::CompilerGeneratedMemberFunctions" href="qdoctests-compilergeneratedmemberfunctions.html#CompilerGeneratedMemberFunctions-2" status="active" access="public" documented="true" meta="move-constructor" constexpr="true" noexcept="true" overload="true" overload-number="2" signature="CompilerGeneratedMemberFunctions(const QDocTests::CompilerGeneratedMemberFunctions &amp;&amp;other)">
+ <parameter type="const QDocTests::CompilerGeneratedMemberFunctions &amp;&amp;" name="other" default=""/>
+ <description>
+ <para>Move-constructs a <link raw="CompilerGeneratedMemberFunctions" href="qdoctests-compilergeneratedmemberfunctions.html" type="class">CompilerGeneratedMemberFunctions</link> object from <argument>other</argument>.</para>
+ </description>
+ </function>
+ </class>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/webxml/qdoctests-module.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/webxml/qdoctests-module.webxml
new file mode 100644
index 000000000..5d24b3077
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/webxml/qdoctests-module.webxml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document/>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/webxml/qdoctests.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/webxml/qdoctests.webxml
new file mode 100644
index 000000000..0485b5efd
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/expected/webxml/qdoctests.webxml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <namespace name="QDocTests" href="qdoctests.html" status="active" access="public" location="compilergeneratedmemberfunctions.h" documented="true" module="QDocTests" brief="Contains test classes for QDoc">
+ <description>
+ <brief>The <link raw="QDocTests" href="qdoctests-module.html" type="module">QDocTests</link> namespace contains test classes for QDoc.</brief>
+ <para>The <link raw="QDocTests" href="qdoctests-module.html" type="module">QDocTests</link> namespace contains test classes for QDoc.</para>
+ </description>
+ <class name="CompilerGeneratedMemberFunctions" fullname="QDocTests::CompilerGeneratedMemberFunctions" href="qdoctests-compilergeneratedmemberfunctions.html" status="active" access="public" location="compilergeneratedmemberfunctions.h" documented="true" module="QDocTests" brief="A test class for compiler-generated member functions">
+ <description>
+ <brief>A test class for compiler-generated member functions.</brief>
+ <para>This class is used to test the documentation of compiler-generated member functions.</para>
+ </description>
+ <function name="CompilerGeneratedMemberFunctions" fullname="QDocTests::CompilerGeneratedMemberFunctions::CompilerGeneratedMemberFunctions" href="qdoctests-compilergeneratedmemberfunctions.html#CompilerGeneratedMemberFunctions" status="active" access="public" documented="true" meta="constructor" constexpr="true" noexcept="true" signature="CompilerGeneratedMemberFunctions()">
+ <description>
+ <para>Constructs a <link raw="CompilerGeneratedMemberFunctions" href="qdoctests-compilergeneratedmemberfunctions.html" type="class">CompilerGeneratedMemberFunctions</link> object.</para>
+ </description>
+ </function>
+ <function name="CompilerGeneratedMemberFunctions" fullname="QDocTests::CompilerGeneratedMemberFunctions::CompilerGeneratedMemberFunctions" href="qdoctests-compilergeneratedmemberfunctions.html#CompilerGeneratedMemberFunctions-1" status="active" access="public" documented="true" meta="copy-constructor" constexpr="true" noexcept="true" overload="true" overload-number="1" signature="CompilerGeneratedMemberFunctions(const QDocTests::CompilerGeneratedMemberFunctions &amp;other)">
+ <parameter type="const QDocTests::CompilerGeneratedMemberFunctions &amp;" name="other" default=""/>
+ <description>
+ <para>Copy-constructs a <link raw="CompilerGeneratedMemberFunctions" href="qdoctests-compilergeneratedmemberfunctions.html" type="class">CompilerGeneratedMemberFunctions</link> object from <argument>other</argument>.</para>
+ </description>
+ </function>
+ <function name="CompilerGeneratedMemberFunctions" fullname="QDocTests::CompilerGeneratedMemberFunctions::CompilerGeneratedMemberFunctions" href="qdoctests-compilergeneratedmemberfunctions.html#CompilerGeneratedMemberFunctions-2" status="active" access="public" documented="true" meta="move-constructor" constexpr="true" noexcept="true" overload="true" overload-number="2" signature="CompilerGeneratedMemberFunctions(const QDocTests::CompilerGeneratedMemberFunctions &amp;&amp;other)">
+ <parameter type="const QDocTests::CompilerGeneratedMemberFunctions &amp;&amp;" name="other" default=""/>
+ <description>
+ <para>Move-constructs a <link raw="CompilerGeneratedMemberFunctions" href="qdoctests-compilergeneratedmemberfunctions.html" type="class">CompilerGeneratedMemberFunctions</link> object from <argument>other</argument>.</para>
+ </description>
+ </function>
+ </class>
+ </namespace>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/src/compilergeneratedmemberfunctions.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/src/compilergeneratedmemberfunctions.cpp
new file mode 100644
index 000000000..fb846fb0c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/src/compilergeneratedmemberfunctions.cpp
@@ -0,0 +1,45 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "compilergeneratedmemberfunctions.h"
+
+/*!
+ \module QDocTests
+ \brief The QDocTests module contains test classes for QDoc.
+
+ The QDocTests module contains test classes for QDoc.
+*/
+
+/*!
+ \namespace QDocTests
+ \inmodule QDocTests
+ \brief The QDocTests namespace contains test classes for QDoc.
+
+ The QDocTests namespace contains test classes for QDoc.
+*/
+
+/*!
+ \class QDocTests::CompilerGeneratedMemberFunctions
+ \inmodule QDocTests
+ \brief A test class for compiler-generated member functions.
+
+ This class is used to test the documentation of compiler-generated member functions.
+*/
+
+/*!
+ \fn constexpr QDocTests::CompilerGeneratedMemberFunctions::CompilerGeneratedMemberFunctions() noexcept
+
+ Constructs a CompilerGeneratedMemberFunctions object.
+*/
+
+/*!
+ \fn constexpr QDocTests::CompilerGeneratedMemberFunctions::CompilerGeneratedMemberFunctions(const CompilerGeneratedMemberFunctions &other) noexcept
+
+ Copy-constructs a CompilerGeneratedMemberFunctions object from \a other.
+*/
+
+/*!
+ \fn constexpr QDocTests::CompilerGeneratedMemberFunctions::CompilerGeneratedMemberFunctions(const CompilerGeneratedMemberFunctions &&other) noexcept
+
+ Move-constructs a CompilerGeneratedMemberFunctions object from \a other.
+*/
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/src/compilergeneratedmemberfunctions.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/src/compilergeneratedmemberfunctions.h
new file mode 100644
index 000000000..fce05b727
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/compiler_generated_member_functions/src/compilergeneratedmemberfunctions.h
@@ -0,0 +1,20 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef COMPILERGENERATEDMEMBERFUNCTIONS_H
+#define COMPILERGENERATEDMEMBERFUNCTIONS_H
+
+namespace QDocTests {
+
+class CompilerGeneratedMemberFunctions {
+public:
+ int number() const { return m_number; }
+
+private:
+ int m_number {42};
+
+};
+
+} // QDocTests
+
+#endif // COMPILERGENERATEDMEMBERFUNCTIONS_H
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..bcb583839 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>
@@ -95,18 +89,17 @@
<db:para>Overloads that share a documentation comment, optionally taking a parameter <db:code its:translate="no" role="parameter">b</db:code>.</db:para>
</db:section>
<db:section xml:id="Test">
-<db:title its:translate="no">[noexcept default] Test::Test()</db:title>
+<db:title its:translate="no">Test::Test()</db:title>
<db:constructorsynopsis>
<db:methodname>Test</db:methodname>
<db:void/>
-<db:modifier>default</db:modifier>
<db:synopsisinfo role="meta">constructor</db:synopsisinfo>
-<db:synopsisinfo role="signature">Test() = default</db:synopsisinfo>
+<db:synopsisinfo role="signature">Test()</db:synopsisinfo>
<db:synopsisinfo role="access">public</db:synopsisinfo>
<db:synopsisinfo role="status">active</db:synopsisinfo>
<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
</db:constructorsynopsis>
-<db:para>Default constructor.</db:para>
+<db:para>The constructor is deleted.</db:para>
</db:section>
<db:section xml:id="funcPtr">
<db:title its:translate="no">void (*)(bool) Test::funcPtr(bool <db:emphasis>b</db:emphasis>, const char *<db:emphasis>s</db:emphasis>)</db:title>
@@ -262,7 +255,7 @@
<db:para>Function that must be reimplemented.</db:para>
</db:section>
<db:section xml:id="operator-eq">
-<db:title its:translate="no">[noexcept default] TestQDoc::Test &amp;Test::operator=(TestQDoc::Test &amp;&amp;<db:emphasis>other</db:emphasis>)</db:title>
+<db:title its:translate="no">TestQDoc::Test &amp;Test::operator=(TestQDoc::Test &amp;&amp;<db:emphasis>other</db:emphasis>)</db:title>
<db:methodsynopsis>
<db:type>TestQDoc::Test &amp;</db:type>
<db:methodname>operator=</db:methodname>
@@ -270,14 +263,13 @@
<db:type>TestQDoc::Test &amp;&amp;</db:type>
<db:parameter>other</db:parameter>
</db:methodparam>
-<db:modifier>default</db:modifier>
<db:synopsisinfo role="meta">move-assign</db:synopsisinfo>
-<db:synopsisinfo role="signature">TestQDoc::Test &amp; operator=(TestQDoc::Test &amp;&amp;other) = default</db:synopsisinfo>
+<db:synopsisinfo role="signature">TestQDoc::Test &amp; operator=(TestQDoc::Test &amp;&amp;other)</db:synopsisinfo>
<db:synopsisinfo role="access">public</db:synopsisinfo>
<db:synopsisinfo role="status">active</db:synopsisinfo>
<db:synopsisinfo role="threadsafeness">unspecified</db:synopsisinfo>
</db:methodsynopsis>
-<db:para>Move-assigns <db:code its:translate="no" role="parameter">other</db:code>.</db:para>
+<db:para>The move assignment operator is deleted. <db:code its:translate="no" role="parameter">other</db:code> cannot be moved from.</db:para>
</db:section>
</db:section>
<db:section xml:id="related-non-members">
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/test.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test.index
index 8375090f0..55637861e 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test.index
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/html/test.index
@@ -110,7 +110,7 @@
<function name="QDOCTEST_MACRO2" href="testqdoc-test.html#QDOCTEST_MACRO2" status="active" access="public" documented="true" related="1" since="Test 1.1" meta="macrowithparams" brief="A macro with argument x" signature="QDOCTEST_MACRO2(int &amp;x)" groups="testgroup">
<parameter type="int &amp;" name="x" default=""/>
</function>
- <function name="Test" fullname="TestQDoc::Test::Test" href="testqdoc-test.html#Test" status="active" access="public" documented="true" meta="constructor" noexcept="true" signature="Test()"/>
+ <function name="Test" fullname="TestQDoc::Test::Test" href="testqdoc-test.html#Test" status="active" access="public" location="testcpp.h" documented="true" meta="constructor" signature="Test()"/>
<function name="anotherObsoleteMember" fullname="TestQDoc::Test::anotherObsoleteMember" href="testqdoc-test-obsolete.html#anotherObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void anotherObsoleteMember()"/>
<function name="deprecatedMember" fullname="TestQDoc::Test::deprecatedMember" href="testqdoc-test-obsolete.html#deprecatedMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void deprecatedMember()"/>
<function name="funcPtr" fullname="TestQDoc::Test::funcPtr" href="testqdoc-test.html#funcPtr" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void (*)(bool)" signature="void (*)(bool) funcPtr(bool b, const char *s)">
@@ -123,7 +123,7 @@
<function name="obsoleteMember" fullname="TestQDoc::Test::obsoleteMember" href="testqdoc-test-obsolete.html#obsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void obsoleteMember()"/>
<function name="operator++" fullname="TestQDoc::Test::operator++" href="testqdoc-test-obsolete.html#operator-2b-2b" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator++()"/>
<function name="operator--" fullname="TestQDoc::Test::operator--" href="testqdoc-test-obsolete.html#operator--" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator--()"/>
- <function name="operator=" fullname="TestQDoc::Test::operator=" href="testqdoc-test.html#operator-eq" status="active" access="public" documented="true" meta="move-assign" noexcept="true" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator=(TestQDoc::Test &amp;&amp;other)" groups="testgroup">
+ <function name="operator=" fullname="TestQDoc::Test::operator=" href="testqdoc-test.html#operator-eq" status="active" access="public" location="testcpp.h" documented="true" meta="move-assign" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator=(TestQDoc::Test &amp;&amp;other)" groups="testgroup">
<parameter type="TestQDoc::Test &amp;&amp;" name="other" default=""/>
</function>
<function name="operator==" href="testqdoc-test.html#operator-eq-eq" status="active" access="public" location="testcpp.h" documented="true" related="2" meta="plain" type="bool" signature="bool operator==(const TestQDoc::Test &amp;lhs, const TestQDoc::Test &amp;rhs)">
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..25e1966aa 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>
@@ -95,8 +95,8 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr>
<p>Overloads that share a documentation comment, optionally taking a parameter <i translate="no">b</i>.</p>
<!-- @@@ -->
<!-- $$$Test[overload1]$$$Test -->
-<h3 class="fn" translate="no" id="Test"><code class="details extra" translate="no">[noexcept default]</code> Test::<span class="name">Test</span>()</h3>
-<p>Default constructor.</p>
+<h3 class="fn" translate="no" id="Test">Test::<span class="name">Test</span>()</h3>
+<p>The constructor is deleted.</p>
<!-- @@@Test -->
<!-- $$$funcPtr[overload1]$$$funcPtrboolconstchar* -->
<h3 class="fn" translate="no" id="funcPtr"><span class="type">void</span> (*)(<span class="type">bool</span>) Test::<span class="name">funcPtr</span>(<span class="type">bool</span> <i>b</i>, const <span class="type">char</span> *<i>s</i>)</h3>
@@ -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 -->
@@ -142,8 +142,8 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr>
<p>Function that must be reimplemented.</p>
<!-- @@@virtualFun -->
<!-- $$$operator=[overload1]$$$operator=TestQDoc::Test&& -->
-<h3 class="fn" translate="no" id="operator-eq"><code class="details extra" translate="no">[noexcept default]</code> <span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;Test::<span class="name">operator=</span>(<span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;&amp;<i>other</i>)</h3>
-<p>Move-assigns <i translate="no">other</i>.</p>
+<h3 class="fn" translate="no" id="operator-eq"><span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;Test::<span class="name">operator=</span>(<span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;&amp;<i>other</i>)</h3>
+<p>The move assignment operator is deleted. <i translate="no">other</i> cannot be moved from.</p>
<!-- @@@operator= -->
</div>
<div class="relnonmem">
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/expected/webxml/test.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test.index
index 210262454..8f26aa523 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test.index
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/test.index
@@ -98,7 +98,7 @@
<function name="QDOCTEST_MACRO2" href="testqdoc-test.html#QDOCTEST_MACRO2" status="active" access="public" documented="true" related="1" since="Test 1.1" meta="macrowithparams" brief="A macro with argument x" signature="QDOCTEST_MACRO2(int &amp;x)" groups="testgroup">
<parameter type="int &amp;" name="x" default=""/>
</function>
- <function name="Test" fullname="TestQDoc::Test::Test" href="testqdoc-test.html#Test" status="active" access="public" documented="true" meta="constructor" noexcept="true" signature="Test()"/>
+ <function name="Test" fullname="TestQDoc::Test::Test" href="testqdoc-test.html#Test" status="active" access="public" location="testcpp.h" documented="true" meta="constructor" signature="Test()"/>
<function name="anotherObsoleteMember" fullname="TestQDoc::Test::anotherObsoleteMember" href="testqdoc-test-obsolete.html#anotherObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void anotherObsoleteMember()"/>
<function name="deprecatedMember" fullname="TestQDoc::Test::deprecatedMember" href="testqdoc-test-obsolete.html#deprecatedMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void deprecatedMember()"/>
<function name="funcPtr" fullname="TestQDoc::Test::funcPtr" href="testqdoc-test.html#funcPtr" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void (*)(bool)" signature="void (*)(bool) funcPtr(bool b, const char *s)">
@@ -111,7 +111,7 @@
<function name="obsoleteMember" fullname="TestQDoc::Test::obsoleteMember" href="testqdoc-test-obsolete.html#obsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void obsoleteMember()"/>
<function name="operator++" fullname="TestQDoc::Test::operator++" href="testqdoc-test-obsolete.html#operator-2b-2b" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator++()"/>
<function name="operator--" fullname="TestQDoc::Test::operator--" href="testqdoc-test-obsolete.html#operator--" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator--()"/>
- <function name="operator=" fullname="TestQDoc::Test::operator=" href="testqdoc-test.html#operator-eq" status="active" access="public" documented="true" meta="move-assign" noexcept="true" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator=(TestQDoc::Test &amp;&amp;other)" groups="testgroup">
+ <function name="operator=" fullname="TestQDoc::Test::operator=" href="testqdoc-test.html#operator-eq" status="active" access="public" location="testcpp.h" documented="true" meta="move-assign" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator=(TestQDoc::Test &amp;&amp;other)" groups="testgroup">
<parameter type="TestQDoc::Test &amp;&amp;" name="other" default=""/>
</function>
<function name="operator==" href="testqdoc-test.html#operator-eq-eq" status="active" access="public" location="testcpp.h" documented="true" related="2" meta="plain" type="bool" signature="bool operator==(const TestQDoc::Test &amp;lhs, const TestQDoc::Test &amp;rhs)">
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testqdoc-test.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testqdoc-test.webxml
index d83642651..9c9766dc0 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testqdoc-test.webxml
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testqdoc-test.webxml
@@ -11,9 +11,9 @@
<brief>A macro with argument <argument>x</argument>.</brief>
</description>
</function>
- <function name="Test" fullname="TestQDoc::Test::Test" href="testqdoc-test.html#Test" status="active" access="public" documented="true" meta="constructor" noexcept="true" signature="Test()">
+ <function name="Test" fullname="TestQDoc::Test::Test" href="testqdoc-test.html#Test" status="active" access="public" location="testcpp.h" documented="true" meta="constructor" signature="Test()">
<description>
- <para>Default constructor.</para>
+ <para>The constructor is deleted.</para>
</description>
</function>
<function name="anotherObsoleteMember" fullname="TestQDoc::Test::anotherObsoleteMember" href="testqdoc-test-obsolete.html#anotherObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void anotherObsoleteMember()">
@@ -72,10 +72,10 @@
<function name="operator--" fullname="TestQDoc::Test::operator--" href="testqdoc-test-obsolete.html#operator--" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator--()">
<description/>
</function>
- <function name="operator=" fullname="TestQDoc::Test::operator=" href="testqdoc-test.html#operator-eq" status="active" access="public" documented="true" meta="move-assign" noexcept="true" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator=(TestQDoc::Test &amp;&amp;other)" groups="testgroup">
+ <function name="operator=" fullname="TestQDoc::Test::operator=" href="testqdoc-test.html#operator-eq" status="active" access="public" location="testcpp.h" documented="true" meta="move-assign" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator=(TestQDoc::Test &amp;&amp;other)" groups="testgroup">
<parameter type="TestQDoc::Test &amp;&amp;" name="other" default=""/>
<description>
- <para>Move-assigns <argument>other</argument>.</para>
+ <para>The move assignment operator is deleted. <argument>other</argument> cannot be moved from.</para>
</description>
</function>
<function name="operator==" href="testqdoc-test.html#operator-eq-eq" status="active" access="public" location="testcpp.h" documented="true" related="2" meta="plain" type="bool" signature="bool operator==(const TestQDoc::Test &amp;lhs, const TestQDoc::Test &amp;rhs)">
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testqdoc.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testqdoc.webxml
index ba3a26373..dfd9eeb9d 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testqdoc.webxml
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/expected/webxml/testqdoc.webxml
@@ -23,9 +23,9 @@
<brief>A macro with argument <argument>x</argument>.</brief>
</description>
</function>
- <function name="Test" fullname="TestQDoc::Test::Test" href="testqdoc-test.html#Test" status="active" access="public" documented="true" meta="constructor" noexcept="true" signature="Test()">
+ <function name="Test" fullname="TestQDoc::Test::Test" href="testqdoc-test.html#Test" status="active" access="public" location="testcpp.h" documented="true" meta="constructor" signature="Test()">
<description>
- <para>Default constructor.</para>
+ <para>The constructor is deleted.</para>
</description>
</function>
<function name="anotherObsoleteMember" fullname="TestQDoc::Test::anotherObsoleteMember" href="testqdoc-test-obsolete.html#anotherObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void anotherObsoleteMember()">
@@ -84,10 +84,10 @@
<function name="operator--" fullname="TestQDoc::Test::operator--" href="testqdoc-test-obsolete.html#operator--" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator--()">
<description/>
</function>
- <function name="operator=" fullname="TestQDoc::Test::operator=" href="testqdoc-test.html#operator-eq" status="active" access="public" documented="true" meta="move-assign" noexcept="true" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator=(TestQDoc::Test &amp;&amp;other)" groups="testgroup">
+ <function name="operator=" fullname="TestQDoc::Test::operator=" href="testqdoc-test.html#operator-eq" status="active" access="public" location="testcpp.h" documented="true" meta="move-assign" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator=(TestQDoc::Test &amp;&amp;other)" groups="testgroup">
<parameter type="TestQDoc::Test &amp;&amp;" name="other" default=""/>
<description>
- <para>Move-assigns <argument>other</argument>.</para>
+ <para>The move assignment operator is deleted. <argument>other</argument> cannot be moved from.</para>
</description>
</function>
<function name="operator==" href="testqdoc-test.html#operator-eq-eq" status="active" access="public" location="testcpp.h" documented="true" related="2" meta="plain" type="bool" signature="bool operator==(const TestQDoc::Test &amp;lhs, const TestQDoc::Test &amp;rhs)">
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.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/testcpp.cpp
index d31167efb..b14270e45 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/testcpp.cpp
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/comprehensiveproject/src/testcpp.cpp
@@ -76,14 +76,14 @@ namespace TestQDoc {
/*!
\fn TestQDoc::Test::Test()
- Default constructor.
+ The constructor is deleted.
*/
/*!
\fn Test &Test::operator=(Test &&other)
\ingroup testgroup
- Move-assigns \a other.
+ The move assignment operator is deleted. \a other cannot be moved from.
*/
/*!
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..a72367b24 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 {
@@ -68,6 +68,9 @@ using Specialized = Struct<int, T>;
friend bool operator==(const Test &lhs, const Test &rhs) { return false; }
+ Test() = delete;
+ Test &operator=(Test &&other) = delete;
+
protected:
void overload() {}
void overload(bool b) { if (!b) return; }
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/customsortedlists.qdocconf b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/customsortedlists.qdocconf
new file mode 100644
index 000000000..7c985fe1b
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/customsortedlists.qdocconf
@@ -0,0 +1,16 @@
+project = CustomSortedLists
+
+{sourcedirs,headerdirs} = ./src
+
+macro.sortkey = \\meta sortkey {\1}
+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/customsortedlists/expected/docbook/a.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/docbook/a.xml
new file mode 100644
index 000000000..ede5bf5c9
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/docbook/a.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>A</db:title>
+<db:productname>CustomSortedLists</db:productname>
+<db:titleabbrev>CustomSortedLists Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>A.</db:para>
+</db:abstract>
+</db:info>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/docbook/b.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/docbook/b.xml
new file mode 100644
index 000000000..07f69d441
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/docbook/b.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>B</db:title>
+<db:productname>CustomSortedLists</db:productname>
+<db:titleabbrev>CustomSortedLists Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>B.</db:para>
+</db:abstract>
+</db:info>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/docbook/c.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/docbook/c.xml
new file mode 100644
index 000000000..8360ea51a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/docbook/c.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>Second!</db:title>
+<db:productname>CustomSortedLists</db:productname>
+<db:titleabbrev>CustomSortedLists Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>sort key: B.</db:para>
+</db:abstract>
+</db:info>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/docbook/d.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/docbook/d.xml
new file mode 100644
index 000000000..c6ad0cb4a
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/docbook/d.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>First!</db:title>
+<db:productname>CustomSortedLists</db:productname>
+<db:titleabbrev>CustomSortedLists Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>sort key: A.</db:para>
+</db:abstract>
+</db:info>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/docbook/lists.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/docbook/lists.xml
new file mode 100644
index 000000000..65f5d6900
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/docbook/lists.xml
@@ -0,0 +1,102 @@
+<?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>Assorted lists</db:title>
+<db:productname>CustomSortedLists</db:productname>
+<db:titleabbrev>CustomSortedLists Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>CustomSortedLists Reference Documentation.</db:para></db:abstract>
+</db:info>
+<db:section xml:id="generatelist">
+<db:title>\generatelist</db:title>
+<db:itemizedlist role="list">
+<db:listitem>
+<db:para><db:link xlink:href="d.xml" xlink:role="page">First!</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="c.xml" xlink:role="page">Second!</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="a.xml" xlink:role="page">A</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="b.xml" xlink:role="page">B</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+<db:section xml:id="descending">
+<db:title>descending</db:title>
+<db:itemizedlist role="list">
+<db:listitem>
+<db:para><db:link xlink:href="b.xml" xlink:role="page">B</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="a.xml" xlink:role="page">A</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="c.xml" xlink:role="page">Second!</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="d.xml" xlink:role="page">First!</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+</db:section>
+</db:section>
+<db:section xml:id="annotatedlist">
+<db:title>\annotatedlist</db:title>
+<db:variablelist role="list">
+<db:varlistentry>
+<db:term><db:link xlink:href="d.xml" xlink:role="page">First!</db:link></db:term>
+<db:listitem>
+<db:para>sort key: A</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="c.xml" xlink:role="page">Second!</db:link></db:term>
+<db:listitem>
+<db:para>sort key: B</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="a.xml" xlink:role="page">A</db:link></db:term>
+<db:listitem>
+<db:para>A</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="b.xml" xlink:role="page">B</db:link></db:term>
+<db:listitem>
+<db:para>B</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+<db:section xml:id="annotatedlist-descending-3">
+<db:title>descending</db:title>
+<db:variablelist role="list">
+<db:varlistentry>
+<db:term><db:link xlink:href="b.xml" xlink:role="page">B</db:link></db:term>
+<db:listitem>
+<db:para>B</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="a.xml" xlink:role="page">A</db:link></db:term>
+<db:listitem>
+<db:para>A</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="c.xml" xlink:role="page">Second!</db:link></db:term>
+<db:listitem>
+<db:para>sort key: B</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="d.xml" xlink:role="page">First!</db:link></db:term>
+<db:listitem>
+<db:para>sort key: A</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+</db:section>
+</db:section>
+</db:article>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/a.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/a.html
new file mode 100644
index 000000000..b538735a5
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/a.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- test.qdoc -->
+ <meta name="description" content="A">
+ <title>A | CustomSortedLists</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">A</h1>
+<!-- $$$a.html-description -->
+<div class="descr" id="details">
+</div>
+<!-- @@@a.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/b.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/b.html
new file mode 100644
index 000000000..9812f03cf
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/b.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- test.qdoc -->
+ <meta name="description" content="B">
+ <title>B | CustomSortedLists</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">B</h1>
+<!-- $$$b.html-description -->
+<div class="descr" id="details">
+</div>
+<!-- @@@b.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/c.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/c.html
new file mode 100644
index 000000000..31af688ad
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/c.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- test.qdoc -->
+ <meta name="description" content="sort key: B">
+ <title>Second! | CustomSortedLists</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Second!</h1>
+<!-- $$$c.html-description -->
+<div class="descr" id="details">
+</div>
+<!-- @@@c.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/customsortedlists.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/customsortedlists.index
new file mode 100644
index 000000000..bb71f7c50
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/customsortedlists.index
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="CustomSortedLists Reference Documentation" version="" project="CustomSortedLists">
+ <namespace name="" status="active" access="public" module="customsortedlists">
+ <page name="a.html" href="a.html" status="active" location="test.qdoc" documented="true" groups="list" subtype="page" title="A" fulltitle="A" subtitle="" brief="A"/>
+ <page name="lists.html" href="lists.html" status="active" location="test.qdoc" documented="true" subtype="page" title="Assorted lists" fulltitle="Assorted lists" subtitle="">
+ <contents name="generatelist" title="\generatelist" level="1"/>
+ <contents name="descending" title="descending" level="2"/>
+ <contents name="annotatedlist" title="\annotatedlist" level="1"/>
+ <contents name="annotatedlist-descending-3" title="descending" level="2"/>
+ </page>
+ <page name="b.html" href="b.html" status="active" location="test.qdoc" documented="true" groups="list" subtype="page" title="B" fulltitle="B" subtitle="" brief="B"/>
+ <page name="d.html" href="d.html" status="active" location="test.qdoc" documented="true" groups="list" sortkey="A" subtype="page" title="First!" fulltitle="First!" subtitle="" brief="Sort key: A"/>
+ <page name="c.html" href="c.html" status="active" location="test.qdoc" documented="true" groups="list" sortkey="B" subtype="page" title="Second!" fulltitle="Second!" subtitle="" brief="Sort key: B"/>
+ <group name="list" href="list.html" status="internal" seen="false" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/d.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/d.html
new file mode 100644
index 000000000..ebe7fe20c
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/d.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- test.qdoc -->
+ <meta name="description" content="sort key: A">
+ <title>First! | CustomSortedLists</title>
+</head>
+<body>
+<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">First!</h1>
+<!-- $$$d.html-description -->
+<div class="descr" id="details">
+</div>
+<!-- @@@d.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/lists.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/lists.html
new file mode 100644
index 000000000..2706c8b78
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/html/lists.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- test.qdoc -->
+ <title>Assorted lists | CustomSortedLists</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3 id="toc">Contents</h3>
+<ul>
+<li class="level1"><a href="#generatelist">\generatelist</a></li>
+<li class="level2"><a href="#descending">descending</a></li>
+<li class="level1"><a href="#annotatedlist">\annotatedlist</a></li>
+<li class="level2"><a href="#annotatedlist-descending-3">descending</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">Assorted lists</h1>
+<!-- $$$lists.html-description -->
+<div class="descr" id="details">
+<h2 id="generatelist">\generatelist</h2>
+<ul>
+<li translate="no"><a href="d.html">First!</a></li>
+<li translate="no"><a href="c.html">Second!</a></li>
+<li translate="no"><a href="a.html">A</a></li>
+<li translate="no"><a href="b.html">B</a></li>
+</ul>
+<h3 id="descending">descending</h3>
+<ul>
+<li translate="no"><a href="b.html">B</a></li>
+<li translate="no"><a href="a.html">A</a></li>
+<li translate="no"><a href="c.html">Second!</a></li>
+<li translate="no"><a href="d.html">First!</a></li>
+</ul>
+<h2 id="annotatedlist">\annotatedlist</h2>
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="d.html">First!</a></p></td><td class="tblDescr"><p>sort key: A</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="c.html">Second!</a></p></td><td class="tblDescr"><p>sort key: B</p></td></tr>
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="a.html">A</a></p></td><td class="tblDescr"><p>A</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="b.html">B</a></p></td><td class="tblDescr"><p>B</p></td></tr>
+</table></div>
+<h3 id="annotatedlist-descending-3">descending</h3>
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="b.html">B</a></p></td><td class="tblDescr"><p>B</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="a.html">A</a></p></td><td class="tblDescr"><p>A</p></td></tr>
+<tr class="odd topAlign"><td class="tblName" translate="no"><p><a href="c.html">Second!</a></p></td><td class="tblDescr"><p>sort key: B</p></td></tr>
+<tr class="even topAlign"><td class="tblName" translate="no"><p><a href="d.html">First!</a></p></td><td class="tblDescr"><p>sort key: A</p></td></tr>
+</table></div>
+</div>
+<!-- @@@lists.html -->
+</body>
+</html>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/a.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/a.webxml
new file mode 100644
index 000000000..be2f343c0
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/a.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="a.html" href="a.html" status="active" location="test.qdoc" documented="true" groups="list" subtype="page" title="A" fulltitle="A" subtitle="" brief="A">
+ <description>
+ <brief>A</brief>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/b.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/b.webxml
new file mode 100644
index 000000000..7cbd1febf
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/b.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="b.html" href="b.html" status="active" location="test.qdoc" documented="true" groups="list" subtype="page" title="B" fulltitle="B" subtitle="" brief="B">
+ <description>
+ <brief>B</brief>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/c.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/c.webxml
new file mode 100644
index 000000000..f50dad778
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/c.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="c.html" href="c.html" status="active" location="test.qdoc" documented="true" groups="list" sortkey="B" subtype="page" title="Second!" fulltitle="Second!" subtitle="" brief="Sort key: B">
+ <description>
+ <brief>sort key: B</brief>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/customsortedlists.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/customsortedlists.index
new file mode 100644
index 000000000..bb71f7c50
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/customsortedlists.index
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QDOCINDEX>
+<INDEX url="" title="CustomSortedLists Reference Documentation" version="" project="CustomSortedLists">
+ <namespace name="" status="active" access="public" module="customsortedlists">
+ <page name="a.html" href="a.html" status="active" location="test.qdoc" documented="true" groups="list" subtype="page" title="A" fulltitle="A" subtitle="" brief="A"/>
+ <page name="lists.html" href="lists.html" status="active" location="test.qdoc" documented="true" subtype="page" title="Assorted lists" fulltitle="Assorted lists" subtitle="">
+ <contents name="generatelist" title="\generatelist" level="1"/>
+ <contents name="descending" title="descending" level="2"/>
+ <contents name="annotatedlist" title="\annotatedlist" level="1"/>
+ <contents name="annotatedlist-descending-3" title="descending" level="2"/>
+ </page>
+ <page name="b.html" href="b.html" status="active" location="test.qdoc" documented="true" groups="list" subtype="page" title="B" fulltitle="B" subtitle="" brief="B"/>
+ <page name="d.html" href="d.html" status="active" location="test.qdoc" documented="true" groups="list" sortkey="A" subtype="page" title="First!" fulltitle="First!" subtitle="" brief="Sort key: A"/>
+ <page name="c.html" href="c.html" status="active" location="test.qdoc" documented="true" groups="list" sortkey="B" subtype="page" title="Second!" fulltitle="Second!" subtitle="" brief="Sort key: B"/>
+ <group name="list" href="list.html" status="internal" seen="false" title=""/>
+ </namespace>
+</INDEX>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/d.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/d.webxml
new file mode 100644
index 000000000..901b6b719
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/d.webxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="d.html" href="d.html" status="active" location="test.qdoc" documented="true" groups="list" sortkey="A" subtype="page" title="First!" fulltitle="First!" subtitle="" brief="Sort key: A">
+ <description>
+ <brief>sort key: A</brief>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/lists.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/lists.webxml
new file mode 100644
index 000000000..f5a9c206f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/expected/webxml/lists.webxml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WebXML>
+ <document>
+ <page name="lists.html" href="lists.html" status="active" location="test.qdoc" documented="true" subtype="page" title="Assorted lists" fulltitle="Assorted lists" subtitle="">
+ <contents name="generatelist" title="\generatelist" level="1"/>
+ <contents name="descending" title="descending" level="2"/>
+ <contents name="annotatedlist" title="\annotatedlist" level="1"/>
+ <contents name="annotatedlist-descending-3" title="descending" level="2"/>
+ <description>
+ <section id="generatelist">
+ <heading level="1">\generatelist</heading>
+ <generatedlist contents="list"/>
+ </section>
+ <section id="descending">
+ <heading level="2">descending</heading>
+ <generatedlist contents="list"/>
+ </section>
+ <section id="annotatedlist">
+ <heading level="1">\annotatedlist</heading>
+ <table width="100%">
+ <row>
+ <item>
+ <para>
+ <link raw="A" href="a.html" type="page" page="A"/>
+ </para>
+ </item>
+ <item>
+ <para>A</para>
+ </item>
+ </row>
+ <row>
+ <item>
+ <para>
+ <link raw="B" href="b.html" type="page" page="B"/>
+ </para>
+ </item>
+ <item>
+ <para>B</para>
+ </item>
+ </row>
+ <row>
+ <item>
+ <para>
+ <link raw="Second!" href="c.html" type="page" page="Second!"/>
+ </para>
+ </item>
+ <item>
+ <para>sort key: B</para>
+ </item>
+ </row>
+ <row>
+ <item>
+ <para>
+ <link raw="First!" href="d.html" type="page" page="First!"/>
+ </para>
+ </item>
+ <item>
+ <para>sort key: A</para>
+ </item>
+ </row>
+ </table>
+ </section>
+ <section id="descending">
+ <heading level="2">descending</heading>
+ <table width="100%">
+ <row>
+ <item>
+ <para>
+ <link raw="A" href="a.html" type="page" page="A"/>
+ </para>
+ </item>
+ <item>
+ <para>A</para>
+ </item>
+ </row>
+ <row>
+ <item>
+ <para>
+ <link raw="B" href="b.html" type="page" page="B"/>
+ </para>
+ </item>
+ <item>
+ <para>B</para>
+ </item>
+ </row>
+ <row>
+ <item>
+ <para>
+ <link raw="Second!" href="c.html" type="page" page="Second!"/>
+ </para>
+ </item>
+ <item>
+ <para>sort key: B</para>
+ </item>
+ </row>
+ <row>
+ <item>
+ <para>
+ <link raw="First!" href="d.html" type="page" page="First!"/>
+ </para>
+ </item>
+ <item>
+ <para>sort key: A</para>
+ </item>
+ </row>
+ </table>
+ </section>
+ </description>
+ </page>
+ </document>
+</WebXML>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/src/test.qdoc b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/src/test.qdoc
new file mode 100644
index 000000000..3bf65671f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/customsortedlists/src/test.qdoc
@@ -0,0 +1,46 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+/*! \page a.html
+ \ingroup list
+ \title A
+ \brief A
+*/
+
+/*! \page b.html
+ \ingroup list
+ \title B
+ \brief B
+*/
+
+/*! \page c.html
+ \ingroup list
+ \sortkey B
+ \title Second!
+ \brief sort key: B
+*/
+
+/*! \page d.html
+ \ingroup list
+ \sortkey A
+ \title First!
+ \brief sort key: A
+
+*/
+
+/*!
+ \page lists.html
+ \title Assorted lists
+
+ \section1 \\generatelist
+ \generatelist list
+
+ \section2 descending
+ \generatelist [descending] list
+
+ \section1 \\annotatedlist
+ \annotatedlist list
+
+ \section2 descending
+ \annotatedlist [descending] list
+*/
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/docbook/cpptypes.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/cpptypes.xml
index ad3b41d4f..4c4d39790 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/cpptypes.xml
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/cpptypes.xml
@@ -16,9 +16,6 @@
<db:para><db:link xlink:href="testqdoc-test.xml#QDOCTEST_MACRO2" xlink:role="function">TestQDoc::Test::QDOCTEST_MACRO2</db:link></db:para>
</db:listitem>
<db:listitem>
-<db:para><db:link xlink:href="testqdoc-test.xml#operator-eq" xlink:role="function">TestQDoc::Test::operator=()</db:link></db:para>
-</db:listitem>
-<db:listitem>
<db:para><db:link xlink:href="testqdoc-test.xml#someFunctionDefaultArg" xlink:role="function">TestQDoc::Test::someFunctionDefaultArg()</db:link></db:para>
</db:listitem>
</db:itemizedlist>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/testcpp-module.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/testcpp-module.xml
index 277a28f1d..14eddeb8d 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/testcpp-module.xml
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/testcpp-module.xml
@@ -68,12 +68,6 @@
<db:listitem>
<db:para><db:link xlink:href="testcpp-module.xml#section">section() is a section title</db:link></db:para>
</db:listitem>
-<db:listitem>
-<db:para><db:link xlink:href="testqdoc-test.xml#Test">open( parenthesis</db:link></db:para>
-</db:listitem>
-<db:listitem>
-<db:para><db:link xlink:href="https://en.cppreference.com/w/cpp/utility/move">C++11 added std::move(T&amp;&amp; t)</db:link></db:para>
-</db:listitem>
</db:itemizedlist>
<db:section xml:id="section">
<db:title>section()</db:title>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/testqdoc-test.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/testqdoc-test.xml
index f4dc3a09f..1603be377 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/testqdoc-test.xml
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/docbook/testqdoc-test.xml
@@ -151,10 +151,6 @@
<db:bridgehead renderas="sect2" xml:id="overload-1">[protected, since Test 1.2] void Test::overload(bool <db:emphasis>b</db:emphasis>)</db:bridgehead>
<db:para>Overloads that share a documentation comment, optionally taking a parameter <db:code role="parameter">b</db:code>.</db:para>
</db:section>
-<db:section xml:id="Test">
-<db:title>[noexcept default] Test::Test()</db:title>
-<db:para>Default constructor.</db:para>
-</db:section>
<db:section xml:id="funcPtr">
<db:title>void (*)(bool) Test::funcPtr(bool <db:emphasis>b</db:emphasis>, const char *<db:emphasis>s</db:emphasis>)</db:title>
<db:para>Returns a pointer to a function that takes a boolean. Uses <db:code role="parameter">b</db:code> and <db:code role="parameter">s</db:code>.</db:para>
@@ -211,10 +207,6 @@
<db:title>[virtual] void Test::virtualFun()</db:title>
<db:para>Function that must be reimplemented.</db:para>
</db:section>
-<db:section xml:id="operator-eq">
-<db:title>[noexcept default] TestQDoc::Test &amp;Test::operator=(TestQDoc::Test &amp;&amp;<db:emphasis>other</db:emphasis>)</db:title>
-<db:para>Move-assigns <db:code role="parameter">other</db:code>.</db:para>
-</db:section>
</db:section>
<db:section xml:id="related-non-members">
<db:title>Related Non-Members</db:title>
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/cpptypes.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/cpptypes.html
index 8d91afd76..633ca939b 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/cpptypes.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/cpptypes.html
@@ -13,7 +13,6 @@
<ul>
<li translate="no"><a href="testqdoc-test.html">TestQDoc::Test</a></li>
<li translate="no"><a href="testqdoc-test.html#QDOCTEST_MACRO2">TestQDoc::Test::QDOCTEST_MACRO2</a></li>
-<li translate="no"><a href="testqdoc-test.html#operator-eq">TestQDoc::Test::operator=()</a></li>
<li translate="no"><a href="testqdoc-test.html#someFunctionDefaultArg">TestQDoc::Test::someFunctionDefaultArg()</a></li>
</ul>
</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..56f7f5a08 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
@@ -47,8 +47,6 @@
<li><a href="testqdoc-test.html#QDOCTEST_MACRO2" translate="no">QDOCTEST_MACRO2</a>(int &amp;x)</li>
<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>
</ul>
<h4 id="section">section()</h4>
</div>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testcpp.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testcpp.index
index db507bfe3..0ea9571f0 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testcpp.index
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testcpp.index
@@ -27,7 +27,6 @@
<function name="QDOCTEST_MACRO2" href="testqdoc-test.html#QDOCTEST_MACRO2" status="active" access="public" documented="true" related="1" since="Test 1.1" meta="macrowithparams" brief="A macro with argument x" signature="QDOCTEST_MACRO2(int &amp;x)" groups="testgroup">
<parameter type="int &amp;" name="x" default=""/>
</function>
- <function name="Test" fullname="TestQDoc::Test::Test" href="testqdoc-test.html#Test" status="active" access="public" documented="true" meta="constructor" noexcept="true" signature="Test()"/>
<function name="anotherObsoleteMember" fullname="TestQDoc::Test::anotherObsoleteMember" href="testqdoc-test-obsolete.html#anotherObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void anotherObsoleteMember()"/>
<function name="deprecatedMember" fullname="TestQDoc::Test::deprecatedMember" href="testqdoc-test-obsolete.html#deprecatedMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void deprecatedMember()"/>
<function name="funcPtr" fullname="TestQDoc::Test::funcPtr" href="testqdoc-test.html#funcPtr" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void (*)(bool)" signature="void (*)(bool) funcPtr(bool b, const char *s)">
@@ -40,9 +39,6 @@
<function name="obsoleteMember" fullname="TestQDoc::Test::obsoleteMember" href="testqdoc-test-obsolete.html#obsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void obsoleteMember()"/>
<function name="operator++" fullname="TestQDoc::Test::operator++" href="testqdoc-test-obsolete.html#operator-2b-2b" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator++()"/>
<function name="operator--" fullname="TestQDoc::Test::operator--" href="testqdoc-test-obsolete.html#operator--" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator--()"/>
- <function name="operator=" fullname="TestQDoc::Test::operator=" href="testqdoc-test.html#operator-eq" status="active" access="public" documented="true" meta="move-assign" noexcept="true" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator=(TestQDoc::Test &amp;&amp;other)" groups="testgroup">
- <parameter type="TestQDoc::Test &amp;&amp;" name="other" default=""/>
- </function>
<function name="operator==" href="testqdoc-test.html#operator-eq-eq" status="active" access="public" location="testcpp.h" documented="true" related="2" meta="plain" type="bool" signature="bool operator==(const TestQDoc::Test &amp;lhs, const TestQDoc::Test &amp;rhs)">
<parameter type="const TestQDoc::Test &amp;" name="lhs" default=""/>
<parameter type="const TestQDoc::Test &amp;" name="rhs" default=""/>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-test-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-test-members.html
index a26f10184..8f065c3b0 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-test-members.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-test-members.html
@@ -16,7 +16,6 @@
<li class="fn" translate="no">enum <span class="name"><b><a href="testqdoc-test.html#ClassicEnum-enum" translate="no">ClassicEnum</a></b></span></li>
<li class="fn" translate="no">enum class <span class="name"><b><a href="testqdoc-test.html#ScopedEnum-enum" translate="no">ScopedEnum</a></b></span></li>
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#SomeType-typedef" translate="no">SomeType</a></b></span></li>
-<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#Test" translate="no">Test</a></b></span>()</li>
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#funcPtr" translate="no">funcPtr</a></b></span>(bool, const char *) : void (*)(bool)</li>
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#inlineFunction" translate="no">inlineFunction</a></b></span>()</li>
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#methodWithEmDashInItsDocs" translate="no">methodWithEmDashInItsDocs</a></b></span>()</li>
@@ -26,7 +25,6 @@
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#someFunction" translate="no">someFunction</a></b></span>(int, int) : int</li>
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a></b></span>(int, bool) const</li>
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#virtualFun" translate="no">virtualFun</a></b></span>()</li>
-<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#operator-eq" translate="no">operator=</a></b></span>(TestQDoc::Test &amp;&amp;) : TestQDoc::Test &amp;</li>
</ul>
</body>
</html>
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..b89711932 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>
@@ -53,7 +53,6 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr>
</table></div>
<h2 id="public-functions">Public Functions</h2>
<div class="table"><table class="alignedsummary" translate="no">
-<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#Test" translate="no">Test</a></b>()</td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> void (*)(bool) </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#funcPtr" translate="no">funcPtr</a></b>(bool <i>b</i>, const char *<i>s</i>)</td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#inlineFunction" translate="no">inlineFunction</a></b>()</td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#methodWithEmDashInItsDocs" translate="no">methodWithEmDashInItsDocs</a></b>()</td></tr>
@@ -61,7 +60,6 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> int </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#someFunction" translate="no">someFunction</a></b>(int, int <i>v</i> = 0)</td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a></b>(int <i>i</i>, bool <i>b</i> = false) const</td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> virtual void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#virtualFun" translate="no">virtualFun</a></b>()</td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> TestQDoc::Test &amp;</td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#operator-eq" translate="no">operator=</a></b>(TestQDoc::Test &amp;&amp;<i>other</i>)</td></tr>
</table></div>
<h2 id="protected-functions">Protected Functions</h2>
<div class="table"><table class="alignedsummary" translate="no">
@@ -114,10 +112,6 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr>
<h3 class="fn fngroupitem" translate="no" id="overload"><code class="details extra" translate="no">[protected]</code> <span class="type">void</span> Test::<span class="name">overload</span>()</h3><h3 class="fn fngroupitem" translate="no" id="overload-1"><code class="details extra" translate="no">[protected, since Test 1.2]</code> <span class="type">void</span> Test::<span class="name">overload</span>(<span class="type">bool</span> <i>b</i>)</h3></div>
<p>Overloads that share a documentation comment, optionally taking a parameter <i translate="no">b</i>.</p>
<!-- @@@ -->
-<!-- $$$Test[overload1]$$$Test -->
-<h3 class="fn" translate="no" id="Test"><code class="details extra" translate="no">[noexcept default]</code> Test::<span class="name">Test</span>()</h3>
-<p>Default constructor.</p>
-<!-- @@@Test -->
<!-- $$$funcPtr[overload1]$$$funcPtrboolconstchar* -->
<h3 class="fn" translate="no" id="funcPtr"><span class="type">void</span> (*)(<span class="type">bool</span>) Test::<span class="name">funcPtr</span>(<span class="type">bool</span> <i>b</i>, const <span class="type">char</span> *<i>s</i>)</h3>
<p>Returns a pointer to a function that takes a boolean. Uses <i translate="no">b</i> and <i translate="no">s</i>.</p>
@@ -153,16 +147,12 @@ 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>
<p>Function that must be reimplemented.</p>
<!-- @@@virtualFun -->
-<!-- $$$operator=[overload1]$$$operator=TestQDoc::Test&& -->
-<h3 class="fn" translate="no" id="operator-eq"><code class="details extra" translate="no">[noexcept default]</code> <span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;Test::<span class="name">operator=</span>(<span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;&amp;<i>other</i>)</h3>
-<p>Move-assigns <i translate="no">other</i>.</p>
-<!-- @@@operator= -->
</div>
<div class="relnonmem">
<h2>Related Non-Members</h2>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-testderived-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-testderived-members.html
index ea0ed8a44..201aba603 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-testderived-members.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/html/testqdoc-testderived-members.html
@@ -22,8 +22,8 @@
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#funcPtr" translate="no">funcPtr</a></b></span>(bool, const char *) : void (*)(bool)</li>
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#inlineFunction" translate="no">inlineFunction</a></b></span>()</li>
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#methodWithEmDashInItsDocs" translate="no">methodWithEmDashInItsDocs</a></b></span>()</li>
-<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#methodWithEnDashInItsDocs" translate="no">methodWithEnDashInItsDocs</a></b></span>()</li>
</ul></td><td class="topAlign"><ul>
+<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#methodWithEnDashInItsDocs" translate="no">methodWithEnDashInItsDocs</a></b></span>()</li>
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#overload" translate="no">overload</a></b></span>()</li>
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#overload-1" translate="no">overload</a></b></span>(bool)</li>
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#someFunction" translate="no">someFunction</a></b></span>(int, int) : int</li>
@@ -31,7 +31,6 @@
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-testderived.html#someValue" translate="no">someValue</a></b></span>() : TestQDoc::TestDerived::NotTypedef</li>
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-testderived.html#virtualFun" translate="no">virtualFun</a></b></span>()</li>
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#virtualFun" translate="no">virtualFun</a></b></span>()</li>
-<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#operator-eq" translate="no">operator=</a></b></span>(TestQDoc::Test &amp;&amp;) : TestQDoc::Test &amp;</li>
</ul>
</td></tr>
</table></div>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testcpp.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testcpp.index
index db507bfe3..0ea9571f0 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testcpp.index
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testcpp.index
@@ -27,7 +27,6 @@
<function name="QDOCTEST_MACRO2" href="testqdoc-test.html#QDOCTEST_MACRO2" status="active" access="public" documented="true" related="1" since="Test 1.1" meta="macrowithparams" brief="A macro with argument x" signature="QDOCTEST_MACRO2(int &amp;x)" groups="testgroup">
<parameter type="int &amp;" name="x" default=""/>
</function>
- <function name="Test" fullname="TestQDoc::Test::Test" href="testqdoc-test.html#Test" status="active" access="public" documented="true" meta="constructor" noexcept="true" signature="Test()"/>
<function name="anotherObsoleteMember" fullname="TestQDoc::Test::anotherObsoleteMember" href="testqdoc-test-obsolete.html#anotherObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void anotherObsoleteMember()"/>
<function name="deprecatedMember" fullname="TestQDoc::Test::deprecatedMember" href="testqdoc-test-obsolete.html#deprecatedMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void deprecatedMember()"/>
<function name="funcPtr" fullname="TestQDoc::Test::funcPtr" href="testqdoc-test.html#funcPtr" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void (*)(bool)" signature="void (*)(bool) funcPtr(bool b, const char *s)">
@@ -40,9 +39,6 @@
<function name="obsoleteMember" fullname="TestQDoc::Test::obsoleteMember" href="testqdoc-test-obsolete.html#obsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void obsoleteMember()"/>
<function name="operator++" fullname="TestQDoc::Test::operator++" href="testqdoc-test-obsolete.html#operator-2b-2b" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator++()"/>
<function name="operator--" fullname="TestQDoc::Test::operator--" href="testqdoc-test-obsolete.html#operator--" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator--()"/>
- <function name="operator=" fullname="TestQDoc::Test::operator=" href="testqdoc-test.html#operator-eq" status="active" access="public" documented="true" meta="move-assign" noexcept="true" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator=(TestQDoc::Test &amp;&amp;other)" groups="testgroup">
- <parameter type="TestQDoc::Test &amp;&amp;" name="other" default=""/>
- </function>
<function name="operator==" href="testqdoc-test.html#operator-eq-eq" status="active" access="public" location="testcpp.h" documented="true" related="2" meta="plain" type="bool" signature="bool operator==(const TestQDoc::Test &amp;lhs, const TestQDoc::Test &amp;rhs)">
<parameter type="const TestQDoc::Test &amp;" name="lhs" default=""/>
<parameter type="const TestQDoc::Test &amp;" name="rhs" default=""/>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testqdoc-test.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testqdoc-test.webxml
index 0e2cf6c33..b96225ee4 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testqdoc-test.webxml
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testqdoc-test.webxml
@@ -11,11 +11,6 @@
<brief>A macro with argument <argument>x</argument>.</brief>
</description>
</function>
- <function name="Test" fullname="TestQDoc::Test::Test" href="testqdoc-test.html#Test" status="active" access="public" documented="true" meta="constructor" noexcept="true" signature="Test()">
- <description>
- <para>Default constructor.</para>
- </description>
- </function>
<function name="anotherObsoleteMember" fullname="TestQDoc::Test::anotherObsoleteMember" href="testqdoc-test-obsolete.html#anotherObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void anotherObsoleteMember()">
<description>
<para>Use <link raw="obsoleteMember()" href="testqdoc-test.html#obsoleteMember" type="function">obsoleteMember()</link> instead.</para>
@@ -72,12 +67,6 @@
<function name="operator--" fullname="TestQDoc::Test::operator--" href="testqdoc-test-obsolete.html#operator--" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator--()">
<description/>
</function>
- <function name="operator=" fullname="TestQDoc::Test::operator=" href="testqdoc-test.html#operator-eq" status="active" access="public" documented="true" meta="move-assign" noexcept="true" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator=(TestQDoc::Test &amp;&amp;other)" groups="testgroup">
- <parameter type="TestQDoc::Test &amp;&amp;" name="other" default=""/>
- <description>
- <para>Move-assigns <argument>other</argument>.</para>
- </description>
- </function>
<function name="operator==" href="testqdoc-test.html#operator-eq-eq" status="active" access="public" location="testcpp.h" documented="true" related="2" meta="plain" type="bool" signature="bool operator==(const TestQDoc::Test &amp;lhs, const TestQDoc::Test &amp;rhs)">
<parameter type="const TestQDoc::Test &amp;" name="lhs" default=""/>
<parameter type="const TestQDoc::Test &amp;" name="rhs" default=""/>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testqdoc.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testqdoc.webxml
index 70c91ac18..780b35080 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testqdoc.webxml
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/expected/webxml/testqdoc.webxml
@@ -23,11 +23,6 @@
<brief>A macro with argument <argument>x</argument>.</brief>
</description>
</function>
- <function name="Test" fullname="TestQDoc::Test::Test" href="testqdoc-test.html#Test" status="active" access="public" documented="true" meta="constructor" noexcept="true" signature="Test()">
- <description>
- <para>Default constructor.</para>
- </description>
- </function>
<function name="anotherObsoleteMember" fullname="TestQDoc::Test::anotherObsoleteMember" href="testqdoc-test-obsolete.html#anotherObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void anotherObsoleteMember()">
<description>
<para>Use <link raw="obsoleteMember()" href="testqdoc-test.html#obsoleteMember" type="function">obsoleteMember()</link> instead.</para>
@@ -84,12 +79,6 @@
<function name="operator--" fullname="TestQDoc::Test::operator--" href="testqdoc-test-obsolete.html#operator--" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator--()">
<description/>
</function>
- <function name="operator=" fullname="TestQDoc::Test::operator=" href="testqdoc-test.html#operator-eq" status="active" access="public" documented="true" meta="move-assign" noexcept="true" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator=(TestQDoc::Test &amp;&amp;other)" groups="testgroup">
- <parameter type="TestQDoc::Test &amp;&amp;" name="other" default=""/>
- <description>
- <para>Move-assigns <argument>other</argument>.</para>
- </description>
- </function>
<function name="operator==" href="testqdoc-test.html#operator-eq-eq" status="active" access="public" location="testcpp.h" documented="true" related="2" meta="plain" type="bool" signature="bool operator==(const TestQDoc::Test &amp;lhs, const TestQDoc::Test &amp;rhs)">
<parameter type="const TestQDoc::Test &amp;" name="lhs" default=""/>
<parameter type="const TestQDoc::Test &amp;" name="rhs" default=""/>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/testcpp.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/testcpp.cpp
index d31167efb..25dc960ff 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/testcpp.cpp
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/testcpp.cpp
@@ -41,9 +41,6 @@ namespace TestQDoc {
\li \l {TestQDoc::Test::}{QDOCTEST_MACRO2(int &x)}
\li \l {section()}
\li \l {section()} {section() is a section title}
- \li \l {TestQDoc::Test::Test()} {open( parenthesis}
- \li \l {https://en.cppreference.com/w/cpp/utility/move}
- {C++11 added std::move(T&& t)}
\endlist
\section2 section()
@@ -74,19 +71,6 @@ namespace TestQDoc {
*/
/*!
- \fn TestQDoc::Test::Test()
-
- Default constructor.
-*/
-
-/*!
- \fn Test &Test::operator=(Test &&other)
- \ingroup testgroup
-
- Move-assigns \a other.
-*/
-
-/*!
\class TestQDoc::TestDerived
\inmodule TestCPP
\brief A class in a namespace, derived from \l [CPP] Test.
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/testcpp.h b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/testcpp.h
index 06126494a..9b29eff25 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/testcpp.h
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/scopedenum/src/testcpp.h
@@ -68,6 +68,8 @@ using Specialized = Struct<int, T>;
friend bool operator==(const Test &lhs, const Test &rhs) { return false; }
+ Test() = delete;
+
protected:
void overload() {}
void overload(bool b) { if (!b) return; }
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/cpptypes.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/cpptypes.xml
index cdd6401c6..8be7809ec 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/cpptypes.xml
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/cpptypes.xml
@@ -16,9 +16,6 @@
<db:para><db:link xlink:href="testqdoc-test.xml#QDOCTEST_MACRO2" xlink:role="function">TestQDoc::Test::QDOCTEST_MACRO2</db:link></db:para>
</db:listitem>
<db:listitem>
-<db:para><db:link xlink:href="testqdoc-test.xml#operator-eq" xlink:role="function">TestQDoc::Test::operator=()</db:link></db:para>
-</db:listitem>
-<db:listitem>
<db:para><db:link xlink:href="testqdoc-test.xml#someFunctionDefaultArg" xlink:role="function">TestQDoc::Test::someFunctionDefaultArg()</db:link></db:para>
</db:listitem>
</db:itemizedlist>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testcpp-module.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testcpp-module.xml
index 33aa7f2d8..d7a8ea674 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testcpp-module.xml
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testcpp-module.xml
@@ -98,12 +98,6 @@
<db:listitem>
<db:para><db:link xlink:href="testcpp-module.xml#section">section() is a section title</db:link></db:para>
</db:listitem>
-<db:listitem>
-<db:para><db:link xlink:href="testqdoc-test.xml#Test">open( parenthesis</db:link></db:para>
-</db:listitem>
-<db:listitem>
-<db:para><db:link xlink:href="https://en.cppreference.com/w/cpp/utility/move">C++11 added std::move(T&amp;&amp; t)</db:link></db:para>
-</db:listitem>
</db:itemizedlist>
<db:section xml:id="section">
<db:title>section()</db:title>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testqdoc-test.xml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testqdoc-test.xml
index 10e34e985..bf8c99483 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testqdoc-test.xml
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/docbook/testqdoc-test.xml
@@ -79,10 +79,6 @@
<db:bridgehead renderas="sect2" xml:id="overload-1">[protected, since Test 1.2] void Test::overload(bool <db:emphasis>b</db:emphasis>)</db:bridgehead>
<db:para>Overloads that share a documentation comment, optionally taking a parameter <db:code role="parameter">b</db:code>.</db:para>
</db:section>
-<db:section xml:id="Test">
-<db:title>[noexcept default] Test::Test()</db:title>
-<db:para>Default constructor.</db:para>
-</db:section>
<db:section xml:id="funcPtr">
<db:title>void (*)(bool) Test::funcPtr(bool <db:emphasis>b</db:emphasis>, const char *<db:emphasis>s</db:emphasis>)</db:title>
<db:para>Returns a pointer to a function that takes a boolean. Uses <db:code role="parameter">b</db:code> and <db:code role="parameter">s</db:code>.</db:para>
@@ -143,10 +139,6 @@
<db:title>[virtual] void Test::virtualFun()</db:title>
<db:para>Function that must be reimplemented.</db:para>
</db:section>
-<db:section xml:id="operator-eq">
-<db:title>[noexcept default] TestQDoc::Test &amp;Test::operator=(TestQDoc::Test &amp;&amp;<db:emphasis>other</db:emphasis>)</db:title>
-<db:para>Move-assigns <db:code role="parameter">other</db:code>.</db:para>
-</db:section>
</db:section>
<db:section xml:id="related-non-members">
<db:title>Related Non-Members</db:title>
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/cpptypes.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/cpptypes.html
index 8fbea8167..f33885f8f 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/cpptypes.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/cpptypes.html
@@ -13,7 +13,6 @@
<ul>
<li translate="no"><a href="testqdoc-test.html">TestQDoc::Test</a></li>
<li translate="no"><a href="testqdoc-test.html#QDOCTEST_MACRO2">TestQDoc::Test::QDOCTEST_MACRO2</a></li>
-<li translate="no"><a href="testqdoc-test.html#operator-eq">TestQDoc::Test::operator=()</a></li>
<li translate="no"><a href="testqdoc-test.html#someFunctionDefaultArg">TestQDoc::Test::someFunctionDefaultArg()</a></li>
</ul>
</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..8734780e6 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
@@ -52,8 +52,6 @@
<li><a href="testqdoc-test.html#QDOCTEST_MACRO2" translate="no">QDOCTEST_MACRO2</a>(int &amp;x)</li>
<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>
</ul>
<h4 id="section">section()</h4>
</div>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-test-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-test-members.html
index 63053e36b..2bd243006 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-test-members.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-test-members.html
@@ -16,7 +16,6 @@
<li class="fn" translate="no">struct <span class="name"><b><a href="testqdoc-test-struct.html" translate="no">Struct</a></b></span></li>
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#SomeType-typedef" translate="no">SomeType</a></b></span></li>
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#Specialized-typedef" translate="no">Specialized</a></b></span></li>
-<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#Test" translate="no">Test</a></b></span>()</li>
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#funcPtr" translate="no">funcPtr</a></b></span>(bool, const char *) : void (*)(bool)</li>
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#funcTemplate" translate="no">funcTemplate</a></b></span>(T1, T2)</li>
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#inlineFunction" translate="no">inlineFunction</a></b></span>()</li>
@@ -27,7 +26,6 @@
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#someFunction" translate="no">someFunction</a></b></span>(int, int) : int</li>
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a></b></span>(int, bool) const</li>
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#virtualFun" translate="no">virtualFun</a></b></span>()</li>
-<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#operator-eq" translate="no">operator=</a></b></span>(TestQDoc::Test &amp;&amp;) : TestQDoc::Test &amp;</li>
</ul>
</body>
</html>
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..0f25a69d4 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>
@@ -53,7 +53,6 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr>
</table></div>
<h2 id="public-functions">Public Functions</h2>
<div class="table"><table class="alignedsummary" translate="no">
-<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#Test" translate="no">Test</a></b>()</td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> void (*)(bool) </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#funcPtr" translate="no">funcPtr</a></b>(bool <i>b</i>, const char *<i>s</i>)</td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#inlineFunction" translate="no">inlineFunction</a></b>()</td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#methodWithEmDashInItsDocs" translate="no">methodWithEmDashInItsDocs</a></b>()</td></tr>
@@ -61,7 +60,6 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> int </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#someFunction" translate="no">someFunction</a></b>(int, int <i>v</i> = 0)</td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#someFunctionDefaultArg" translate="no">someFunctionDefaultArg</a></b>(int <i>i</i>, bool <i>b</i> = false) const</td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> virtual void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#virtualFun" translate="no">virtualFun</a></b>()</td></tr>
-<tr><td class="memItemLeft rightAlign topAlign"> TestQDoc::Test &amp;</td><td class="memItemRight bottomAlign"><b><a href="testqdoc-test.html#operator-eq" translate="no">operator=</a></b>(TestQDoc::Test &amp;&amp;<i>other</i>)</td></tr>
</table></div>
<h2 id="protected-functions">Protected Functions</h2>
<div class="table"><table class="alignedsummary" translate="no">
@@ -100,10 +98,6 @@ target_link_libraries(mytarget PRIVATE Qt6::QDocTest)</td></tr>
<h3 class="fn fngroupitem" translate="no" id="overload"><code class="details extra" translate="no">[protected]</code> <span class="type">void</span> Test::<span class="name">overload</span>()</h3><h3 class="fn fngroupitem" translate="no" id="overload-1"><code class="details extra" translate="no">[protected, since Test 1.2]</code> <span class="type">void</span> Test::<span class="name">overload</span>(<span class="type">bool</span> <i>b</i>)</h3></div>
<p>Overloads that share a documentation comment, optionally taking a parameter <i translate="no">b</i>.</p>
<!-- @@@ -->
-<!-- $$$Test[overload1]$$$Test -->
-<h3 class="fn" translate="no" id="Test"><code class="details extra" translate="no">[noexcept default]</code> Test::<span class="name">Test</span>()</h3>
-<p>Default constructor.</p>
-<!-- @@@Test -->
<!-- $$$funcPtr[overload1]$$$funcPtrboolconstchar* -->
<h3 class="fn" translate="no" id="funcPtr"><span class="type">void</span> (*)(<span class="type">bool</span>) Test::<span class="name">funcPtr</span>(<span class="type">bool</span> <i>b</i>, const <span class="type">char</span> *<i>s</i>)</h3>
<p>Returns a pointer to a function that takes a boolean. Uses <i translate="no">b</i> and <i translate="no">s</i>.</p>
@@ -143,16 +137,12 @@ 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>
<p>Function that must be reimplemented.</p>
<!-- @@@virtualFun -->
-<!-- $$$operator=[overload1]$$$operator=TestQDoc::Test&& -->
-<h3 class="fn" translate="no" id="operator-eq"><code class="details extra" translate="no">[noexcept default]</code> <span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;Test::<span class="name">operator=</span>(<span class="type"><a href="testqdoc-test.html" translate="no">TestQDoc::Test</a></span> &amp;&amp;<i>other</i>)</h3>
-<p>Move-assigns <i translate="no">other</i>.</p>
-<!-- @@@operator= -->
</div>
<div class="relnonmem">
<h2>Related Non-Members</h2>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-testderived-members.html b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-testderived-members.html
index 0ab181f71..cd251011c 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-testderived-members.html
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testqdoc-testderived-members.html
@@ -32,7 +32,6 @@
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-testderived.html#someValue" translate="no">someValue</a></b></span>() : TestQDoc::TestDerived::NotTypedef</li>
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-testderived.html#virtualFun" translate="no">virtualFun</a></b></span>()</li>
<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#virtualFun" translate="no">virtualFun</a></b></span>()</li>
-<li class="fn" translate="no"><span class="name"><b><a href="testqdoc-test.html#operator-eq" translate="no">operator=</a></b></span>(TestQDoc::Test &amp;&amp;) : TestQDoc::Test &amp;</li>
</ul>
</td></tr>
</table></div>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testtemplate.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testtemplate.index
index 3f227d133..34346db56 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testtemplate.index
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/html/testtemplate.index
@@ -30,7 +30,6 @@
<parameter type="int &amp;" name="x" default=""/>
</function>
<function name="Q_INVOKABLE" href="testqdoc-test.html#Q_INVOKABLE" status="active" access="public" documented="true" related="2" meta="macrowithoutparams" signature="Q_INVOKABLE"/>
- <function name="Test" fullname="TestQDoc::Test::Test" href="testqdoc-test.html#Test" status="active" access="public" documented="true" meta="constructor" noexcept="true" signature="Test()"/>
<function name="anotherObsoleteMember" fullname="TestQDoc::Test::anotherObsoleteMember" href="testqdoc-test-obsolete.html#anotherObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void anotherObsoleteMember()"/>
<function name="deprecatedMember" fullname="TestQDoc::Test::deprecatedMember" href="testqdoc-test-obsolete.html#deprecatedMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void deprecatedMember()"/>
<function name="funcPtr" fullname="TestQDoc::Test::funcPtr" href="testqdoc-test.html#funcPtr" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void (*)(bool)" signature="void (*)(bool) funcPtr(bool b, const char *s)">
@@ -47,9 +46,6 @@
<function name="obsoleteMember" fullname="TestQDoc::Test::obsoleteMember" href="testqdoc-test-obsolete.html#obsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void obsoleteMember()"/>
<function name="operator++" fullname="TestQDoc::Test::operator++" href="testqdoc-test-obsolete.html#operator-2b-2b" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator++()"/>
<function name="operator--" fullname="TestQDoc::Test::operator--" href="testqdoc-test-obsolete.html#operator--" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator--()"/>
- <function name="operator=" fullname="TestQDoc::Test::operator=" href="testqdoc-test.html#operator-eq" status="active" access="public" documented="true" meta="move-assign" noexcept="true" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator=(TestQDoc::Test &amp;&amp;other)" groups="testgroup">
- <parameter type="TestQDoc::Test &amp;&amp;" name="other" default=""/>
- </function>
<function name="operator==" href="testqdoc-test.html#operator-eq-eq" status="active" access="public" location="testcpp.h" documented="true" related="3" meta="plain" type="bool" signature="bool operator==(const TestQDoc::Test &amp;lhs, const TestQDoc::Test &amp;rhs)">
<parameter type="const TestQDoc::Test &amp;" name="lhs" default=""/>
<parameter type="const TestQDoc::Test &amp;" name="rhs" default=""/>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc-test.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc-test.webxml
index 2392339c6..d6dfec6f1 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc-test.webxml
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc-test.webxml
@@ -16,11 +16,6 @@
<para>This is a mock Q_INVOKABLE for the purpose of ensuring QDoc autolink to it as expected.</para>
</description>
</function>
- <function name="Test" fullname="TestQDoc::Test::Test" href="testqdoc-test.html#Test" status="active" access="public" documented="true" meta="constructor" noexcept="true" signature="Test()">
- <description>
- <para>Default constructor.</para>
- </description>
- </function>
<function name="anotherObsoleteMember" fullname="TestQDoc::Test::anotherObsoleteMember" href="testqdoc-test-obsolete.html#anotherObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void anotherObsoleteMember()">
<description>
<para>Use <link raw="obsoleteMember()" href="testqdoc-test.html#obsoleteMember" type="function">obsoleteMember()</link> instead.</para>
@@ -84,12 +79,6 @@
<function name="operator--" fullname="TestQDoc::Test::operator--" href="testqdoc-test-obsolete.html#operator--" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator--()">
<description/>
</function>
- <function name="operator=" fullname="TestQDoc::Test::operator=" href="testqdoc-test.html#operator-eq" status="active" access="public" documented="true" meta="move-assign" noexcept="true" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator=(TestQDoc::Test &amp;&amp;other)" groups="testgroup">
- <parameter type="TestQDoc::Test &amp;&amp;" name="other" default=""/>
- <description>
- <para>Move-assigns <argument>other</argument>.</para>
- </description>
- </function>
<function name="operator==" href="testqdoc-test.html#operator-eq-eq" status="active" access="public" location="testcpp.h" documented="true" related="3" meta="plain" type="bool" signature="bool operator==(const TestQDoc::Test &amp;lhs, const TestQDoc::Test &amp;rhs)">
<parameter type="const TestQDoc::Test &amp;" name="lhs" default=""/>
<parameter type="const TestQDoc::Test &amp;" name="rhs" default=""/>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc.webxml b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc.webxml
index 77b4b2305..de87a3e86 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc.webxml
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testqdoc.webxml
@@ -28,11 +28,6 @@
<para>This is a mock Q_INVOKABLE for the purpose of ensuring QDoc autolink to it as expected.</para>
</description>
</function>
- <function name="Test" fullname="TestQDoc::Test::Test" href="testqdoc-test.html#Test" status="active" access="public" documented="true" meta="constructor" noexcept="true" signature="Test()">
- <description>
- <para>Default constructor.</para>
- </description>
- </function>
<function name="anotherObsoleteMember" fullname="TestQDoc::Test::anotherObsoleteMember" href="testqdoc-test-obsolete.html#anotherObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void anotherObsoleteMember()">
<description>
<para>Use <link raw="obsoleteMember()" href="testqdoc-test.html#obsoleteMember" type="function">obsoleteMember()</link> instead.</para>
@@ -96,12 +91,6 @@
<function name="operator--" fullname="TestQDoc::Test::operator--" href="testqdoc-test-obsolete.html#operator--" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator--()">
<description/>
</function>
- <function name="operator=" fullname="TestQDoc::Test::operator=" href="testqdoc-test.html#operator-eq" status="active" access="public" documented="true" meta="move-assign" noexcept="true" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator=(TestQDoc::Test &amp;&amp;other)" groups="testgroup">
- <parameter type="TestQDoc::Test &amp;&amp;" name="other" default=""/>
- <description>
- <para>Move-assigns <argument>other</argument>.</para>
- </description>
- </function>
<function name="operator==" href="testqdoc-test.html#operator-eq-eq" status="active" access="public" location="testcpp.h" documented="true" related="3" meta="plain" type="bool" signature="bool operator==(const TestQDoc::Test &amp;lhs, const TestQDoc::Test &amp;rhs)">
<parameter type="const TestQDoc::Test &amp;" name="lhs" default=""/>
<parameter type="const TestQDoc::Test &amp;" name="rhs" default=""/>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testtemplate.index b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testtemplate.index
index 3f227d133..34346db56 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testtemplate.index
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/expected/webxml/testtemplate.index
@@ -30,7 +30,6 @@
<parameter type="int &amp;" name="x" default=""/>
</function>
<function name="Q_INVOKABLE" href="testqdoc-test.html#Q_INVOKABLE" status="active" access="public" documented="true" related="2" meta="macrowithoutparams" signature="Q_INVOKABLE"/>
- <function name="Test" fullname="TestQDoc::Test::Test" href="testqdoc-test.html#Test" status="active" access="public" documented="true" meta="constructor" noexcept="true" signature="Test()"/>
<function name="anotherObsoleteMember" fullname="TestQDoc::Test::anotherObsoleteMember" href="testqdoc-test-obsolete.html#anotherObsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void anotherObsoleteMember()"/>
<function name="deprecatedMember" fullname="TestQDoc::Test::deprecatedMember" href="testqdoc-test-obsolete.html#deprecatedMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void deprecatedMember()"/>
<function name="funcPtr" fullname="TestQDoc::Test::funcPtr" href="testqdoc-test.html#funcPtr" status="active" access="public" location="testcpp.h" documented="true" meta="plain" type="void (*)(bool)" signature="void (*)(bool) funcPtr(bool b, const char *s)">
@@ -47,9 +46,6 @@
<function name="obsoleteMember" fullname="TestQDoc::Test::obsoleteMember" href="testqdoc-test-obsolete.html#obsoleteMember" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="void" signature="void obsoleteMember()"/>
<function name="operator++" fullname="TestQDoc::Test::operator++" href="testqdoc-test-obsolete.html#operator-2b-2b" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator++()"/>
<function name="operator--" fullname="TestQDoc::Test::operator--" href="testqdoc-test-obsolete.html#operator--" status="deprecated" access="public" location="testcpp.h" documented="true" meta="plain" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator--()"/>
- <function name="operator=" fullname="TestQDoc::Test::operator=" href="testqdoc-test.html#operator-eq" status="active" access="public" documented="true" meta="move-assign" noexcept="true" type="TestQDoc::Test &amp;" signature="TestQDoc::Test &amp; operator=(TestQDoc::Test &amp;&amp;other)" groups="testgroup">
- <parameter type="TestQDoc::Test &amp;&amp;" name="other" default=""/>
- </function>
<function name="operator==" href="testqdoc-test.html#operator-eq-eq" status="active" access="public" location="testcpp.h" documented="true" related="3" meta="plain" type="bool" signature="bool operator==(const TestQDoc::Test &amp;lhs, const TestQDoc::Test &amp;rhs)">
<parameter type="const TestQDoc::Test &amp;" name="lhs" default=""/>
<parameter type="const TestQDoc::Test &amp;" name="rhs" default=""/>
diff --git a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/testcpp.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/testcpp.cpp
index d31167efb..25dc960ff 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/testcpp.cpp
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/testtemplate/src/testcpp.cpp
@@ -41,9 +41,6 @@ namespace TestQDoc {
\li \l {TestQDoc::Test::}{QDOCTEST_MACRO2(int &x)}
\li \l {section()}
\li \l {section()} {section() is a section title}
- \li \l {TestQDoc::Test::Test()} {open( parenthesis}
- \li \l {https://en.cppreference.com/w/cpp/utility/move}
- {C++11 added std::move(T&& t)}
\endlist
\section2 section()
@@ -74,19 +71,6 @@ namespace TestQDoc {
*/
/*!
- \fn TestQDoc::Test::Test()
-
- Default constructor.
-*/
-
-/*!
- \fn Test &Test::operator=(Test &&other)
- \ingroup testgroup
-
- Move-assigns \a other.
-*/
-
-/*!
\class TestQDoc::TestDerived
\inmodule TestCPP
\brief A class in a namespace, derived from \l [CPP] Test.
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..4f80aa29a
--- /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><db:trademark>Acme</db:trademark> is a trademark.</db:para>
+<db:section xml:id="acme-corp">
+<db:title> Acme corp</db:title>
+<db:para><db:phrase>Acme</db:phrase>, the <db:trademark>Acme Anvil</db:trademark>, and <db:trademark>`It Rings Like a Bell!`</db:trademark> 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..c6a5a5953
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/docbook/trademarks.xml
@@ -0,0 +1,19 @@
+<?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><db:trademark>Foo</db:trademark> should have the trademark symbol but no link as we're already on the correct page.</db:para>
+<db:para>For repeated keywords, the symbol is added only to the first instance:</db:para>
+<db:para><db:trademark>Foobar</db:trademark> <db:phrase>Foobar</db:phrase> is a trademark.</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..ae890142c
--- /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><span translate="no">Acme<a href="trademarks.html">&#8482;</a></span> is a trademark.</p>
+<h2 id="acme-corp"> Acme corp</h2>
+<p><span translate="no">Acme</span>, the <span translate="no">Acme Anvil<a href="trademarks.html">&#8482;</a></span>, and <span translate="no">`It Rings Like a Bell!`<a href="trademarks.html">&#8482;</a></span> 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..46aacb969
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/html/trademarks.html
@@ -0,0 +1,23 @@
+<!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><span translate="no">Foo&#8482;</span> should have the trademark symbol but no link as we're already on the correct page.</p>
+<p>For repeated keywords, the symbol is added only to the first instance:</p>
+<p><span translate="no">Foobar&#8482;</span> <span translate="no">Foobar</span> is a trademark.</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..1d9350777
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/expected/webxml/trademarks.webxml
@@ -0,0 +1,20 @@
+<?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>
+ <para>For repeated keywords, the symbol is added only to the first instance:</para>
+ <para>Foobar™ Foobar is a trademark.</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..ca7265253
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/src/test.qdoc
@@ -0,0 +1,32 @@
+// 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.
+
+ For repeated keywords, the symbol is added only to the first
+ instance:
+ \trademark {\Foobar \Foobar}
+*/
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..150f9873f
--- /dev/null
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/trademark_command/trademark_command.qdocconf
@@ -0,0 +1,20 @@
+project = TrademarkCommand
+
+{sourcedirs,headerdirs} = ./src
+
+navigation.trademarkspage = Trademarks
+
+macro.trademark = "\n\n\1 is a trademark.\n\n"
+macro.Foobar = "\\tm {Foobar}"
+
+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/src/qdoc/qdoc/tests/validateqdocoutputfiles/tst_validateqdocoutputfiles.cpp b/src/qdoc/qdoc/tests/validateqdocoutputfiles/tst_validateqdocoutputfiles.cpp
index bcabb4178..a3c08ad7b 100644
--- a/src/qdoc/qdoc/tests/validateqdocoutputfiles/tst_validateqdocoutputfiles.cpp
+++ b/src/qdoc/qdoc/tests/validateqdocoutputfiles/tst_validateqdocoutputfiles.cpp
@@ -26,21 +26,32 @@ private:
QScopedPointer<QTemporaryDir> m_outputDir{};
};
+static constexpr QLatin1StringView ASAN_OPTIONS_ENVVAR{"ASAN_OPTIONS"};
static inline bool regenerate{false};
//! Update `README.md` if you change the name of this environment variable!
static constexpr QLatin1StringView REGENERATE_ENVVAR{"QDOC_REGENERATE_TESTDATA"};
+static QProcessEnvironment s_environment {QProcessEnvironment::systemEnvironment()};
void tst_validateQdocOutputFiles::initTestCase()
{
- QProcessEnvironment environment = QProcessEnvironment::systemEnvironment();
- if (environment.contains(REGENERATE_ENVVAR)) {
+ if (s_environment.contains(REGENERATE_ENVVAR)) {
qInfo() << "Regenerating expected output for all tests.";
regenerate = true;
qInfo("Removing %s environment variable.", REGENERATE_ENVVAR.constData());
- environment.remove(REGENERATE_ENVVAR);
+ s_environment.remove(REGENERATE_ENVVAR);
}
+ // We must disable the use of sigaltstack for ASan to work properly with QDoc when
+ // linked against libclang, to avoid a crash in ASan. This is a known issue and workaround,
+ // see e.g. https://github.com/google/sanitizers/issues/849 and
+ // https://github.com/KDE/kdevelop/commit/e306f3e39aba37b606dadba195fa5b7b73816f8f.
+ // We do this for the process environment of the QDoc process only to avoid affecting
+ // other processes that might be started by the test runner in COIN.
+ const QString optionString = s_environment.contains(ASAN_OPTIONS_ENVVAR) ? ",use_sigaltstack=0" : "use_sigaltstack=0";
+ s_environment.insert(ASAN_OPTIONS_ENVVAR, s_environment.value(ASAN_OPTIONS_ENVVAR) + optionString);
+ qInfo() << "Disabling ASan's alternate signal stack by setting `ASAN_OPTIONS=use_sigaltstack=0`.";
+
// Build the path to the QDoc binary the same way moc tests do for moc.
const auto binpath = QLibraryInfo::path(QLibraryInfo::BinariesPath);
const auto extension = QSysInfo::productType() == "windows" ? ".exe" : "";
@@ -70,8 +81,8 @@ void tst_validateQdocOutputFiles::init()
void tst_validateQdocOutputFiles::runQDocProcess(const QStringList &arguments)
{
QProcess qdocProcess;
+ qdocProcess.setProcessEnvironment(s_environment);
qdocProcess.setProgram(m_qdocBinary);
-
qdocProcess.setArguments(arguments);
auto failQDoc = [&](QProcess::ProcessError) {
diff --git a/src/shared/qtpropertybrowser/qttreepropertybrowser.cpp b/src/shared/qtpropertybrowser/qttreepropertybrowser.cpp
index 5142274c4..073c8a04f 100644
--- a/src/shared/qtpropertybrowser/qttreepropertybrowser.cpp
+++ b/src/shared/qtpropertybrowser/qttreepropertybrowser.cpp
@@ -283,6 +283,8 @@ QWidget *QtPropertyEditorDelegate::createEditor(QWidget *parent,
QWidget *editor = m_editorPrivate->createEditor(property, parent);
if (editor) {
editor->setAutoFillBackground(true);
+ if (editor->palette().color(editor->backgroundRole()) == Qt::transparent)
+ editor->setBackgroundRole(QPalette::Window);
editor->installEventFilter(const_cast<QtPropertyEditorDelegate *>(this));
connect(editor, &QObject::destroyed,
this, &QtPropertyEditorDelegate::slotEditorDestroyed);